2015-10-28 4 views
0

Я практикуя свой SQL, используя вопросы здесь: http://sqlzoo.net/wiki/AdventureWorks_hard_questionsВозврат нескольких элементов в одной строке (SQL)

У меня возникли проблемы с первым. Я отправлю его здесь, поэтому вам не нужно нажимать на ссылку.

Для каждого клиента с «Главным офисом» в Далласе show AddressLine1 «Main Office» и AddressLine1 адреса «Доставка» - если нет адреса доставки, оставьте его пустым. Используйте одну строку для каждого клиента.

Таблицы, участвующие в CustomerAW (с CustomerID, как PKey быть я считаю, что только соответствующее поле), CustomerAddress (с пунктами CustomerID, AddressID и AddressType), а также адрес (с AddressID, addressLine1 и Город является отношение поля).

То, что я сейчас:

SELECT A.AddressLine1, 
FROM Address A, CustomerAddress CA, CustomerAW C 
WHERE C.CustomerID = CA.CustomerID AND A.City = 'Dallas' AND A.AddressID = CA.AddressID 
GROUP BY C.CustomerID 

, но я не знаю, как получить адрес доставки во второй колонке.

ответ

0

Должно быть какое-то поле, определяющее, какой адрес на основном адресе, а какая - доставка. Предполагая, что у вас есть такое поле, тогда есть несколько разных способов сделать это. Вот один с условной агрегации:

select c.customerid, 
    max(case when ca.addresstype = 'Main' then a.addressline1 end) as main, 
    max(case when ca.addresstype = 'Ship' then a.addressline1 end) as ship 
from customeraw c 
    join customeraddress ca on c.customerid = ca.customerid 
    join address a on ca.addressid = a.addressid 
group by c.customerid 
having max(case when ca.addresstype = 'Main' then a.city end) = 'Dallas' 

Другим вариантом было бы присоединиться к несколько раз address стола - один для главного офиса и один для доставки:

select c.customerid, 
    a.addressline1 as main, 
    a2.addressline1 as ship 
from customeraw c 
    join customeraddress ca on c.customerid = ca.customerid 
    join address a on ca.addressid = a.addressid and ca.addresstype = 'Main' 
    join address a2 on ca.addressid = a2.addressid and ca.addresstype = 'Ship' 
where a.City = 'Dallas' 

С этим , вам может потребоваться использовать outer join для адреса доставки в зависимости от желаемых результатов.