У меня есть две таблицы в SQL Server: Customer и адресSQL Pivot с Последовательностью
клиентов Таблица:
CustomerID FirstName LastName
----------- ---------- ----------
1 Andrew Jackson
2 George Washington
Адрес Таблица:
AddressID CustomerID AddressType City
----------- ----------- ----------- ----------
1 1 Home Waxhaw
2 1 Office Nashville
3 2 Home Philadelphia
Это выход что мне нужно:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw Nashville
2 George Philadelphia Null
Это мой запрос, но не получить правильный результат:
SELECT CustomerID, Firstname, HOme as HomeCity, Office as OfficeCity FROM
(SELECT C.CustomerID, C.FirstName, A.AddressID, A.AddressType, A.City
FROM Customer C, Address A
WHERE C.CustomerID = A.CustomerID)as P
PIVOT (MAX(city) FOR AddressType in ([Home],[Office])) as PVT
Это результат, который я получаю:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw NULL
1 Andrew NULL Nashville
2 George Philadelphia Null
Как вы можете видеть клиента 1 показывает дважды в конечный результат. Можно ли получить только одну строку на одного клиента?
Я посмотрел этот пример, но не помогло: HTTP: //stackoverflow.com/questions/6267660/sql-query-to-convert-rows-into-columns
Благодарности
Замечательно, что сработало! Благодаря!! Я не понимал, что addressID вызывает это. Я привык к неявным объединениям, но я начну использовать INNER JOINs, как вы уже упоминали. – kthiagar
В этом случае не имеет большого значения, используются ли неявные или внутренние соединения, и есть несколько разных обсуждений по теме, например [здесь] (http://stackoverflow.com/questions/44917/explicit -vs-неявная SQL-соединение). Мое личное мнение состоит в том, что явные соединения легче читать, позволяя упростить изменение между объединениями «INNER» и «OUTER», а также уменьшить вероятность случайного перекрестного соединения из-за отсутствия предложения where. – GarethD