Ho due tabelle in SQL Server: e indirizzo dell'acquirenteSQL pivot con String
Customer Table:
CustomerID FirstName LastName
----------- ---------- ----------
1 Andrew Jackson
2 George Washington
tabella degli indirizzi:
AddressID CustomerID AddressType City
----------- ----------- ----------- ----------
1 1 Home Waxhaw
2 1 Office Nashville
3 2 Home Philadelphia
Questa è l'uscita di cui ho bisogno:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw Nashville
2 George Philadelphia Null
Questa è la mia interrogazione, ma non ottenere il giusto risultato:
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
questo è il risultato che sto ottenendo:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw NULL
1 Andrew NULL Nashville
2 George Philadelphia Null
Come si può vedere Cliente 1 sta rivelando due volte in il risultato finale. È possibile ottenere solo una riga per cliente?
ho guardato questo esempio, ma non ha aiutato: http: //stackoverflow.com/questions/6267660/sql-query-to-convert-rows-into-columns
Grazie
Meraviglioso, ha funzionato! Grazie!! Non mi rendevo conto che l'addressID lo stava causando. Mi sono abituato ai join impliciti, ma inizierò a utilizzare INNER JOINs come hai menzionato. – kthiagar
In questo scenario non fa molta differenza se vengono utilizzati i join impliciti o interni, e ci sono diverse discussioni sull'argomento, ad es. [Qui] (http://stackoverflow.com/questions/44917/explicit -Vs-implicita-sql-join). Il mio punto di vista personale è che i join espliciti sono più facili da leggere, consentono un più facile cambiamento tra join "INTERNI" e "ESTERNO", e riducono anche il probabile cappuccio di cross join accidentali mancando una clausola where. – GarethD