Tengo dos tablas en SQL Server: y dirección del clienteSQL con cuerdas
Tabla cliente:
CustomerID FirstName LastName
----------- ---------- ----------
1 Andrew Jackson
2 George Washington
tabla de direcciones:
AddressID CustomerID AddressType City
----------- ----------- ----------- ----------
1 1 Home Waxhaw
2 1 Office Nashville
3 2 Home Philadelphia
Ésta es la salida que necesito:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw Nashville
2 George Philadelphia Null
Esta es mi consulta, pero no obtener el resultado correcto:
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
Este es el resultado de que estoy recibiendo:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw NULL
1 Andrew NULL Nashville
2 George Philadelphia Null
Como se puede ver al cliente 1 está apareciendo dos veces en el resultado final. ¿Es posible obtener solo una fila por cliente?
Miré hacia arriba este ejemplo, pero no ayudó: http: //stackoverflow.com/questions/6267660/sql-query-to-convert-rows-into-columns
Gracias
¡Maravilloso, funcionó! ¡¡Gracias!! No me di cuenta de que la ID de dirección lo estaba causando. Me acostumbré a las uniones implícitas, pero comenzaré a usar INNER JOIN como lo mencionaste. – kthiagar
En este escenario, no hay mucha diferencia si se utilizan combinaciones internas o implícitas, y hay varias discusiones diferentes sobre el tema, por ejemplo [aquí] (http://stackoverflow.com/questions/44917/explicit -vs-implicit-sql-joins). Mi opinión personal es que las uniones explícitas son más fáciles de leer, permiten un cambio más fácil entre las uniones 'INTERIOR' y 'EXTERIOR', y también reducen la probabilidad de uniones cruzadas accidentales al omitir una cláusula where. – GarethD