Tôi có hai bảng trong SQL Server: Khách hàng và Địa chỉSQL Pivot với String
khách hàng Bảng:
CustomerID FirstName LastName
----------- ---------- ----------
1 Andrew Jackson
2 George Washington
Địa chỉ Bảng:
AddressID CustomerID AddressType City
----------- ----------- ----------- ----------
1 1 Home Waxhaw
2 1 Office Nashville
3 2 Home Philadelphia
Đây là sản phẩm mà tôi cần:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw Nashville
2 George Philadelphia Null
Đây là câu hỏi của tôi, nhưng không nhận được kết quả đúng:
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
Đây là kết quả mà tôi nhận được:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw NULL
1 Andrew NULL Nashville
2 George Philadelphia Null
Như bạn có thể thấy khách hàng 1 được hiển thị hai lần trong kết quả cuối cùng. Có thể chỉ nhận được một hàng cho mỗi khách hàng không?
Tôi nhìn lên ví dụ này, nhưng không giúp: http: //stackoverflow.com/questions/6267660/sql-query-to-convert-rows-into-columns
Cảm ơn
Tuyệt vời, điều đó đã hiệu quả! Cảm ơn!! Tôi đã không nhận ra addressID đã gây ra nó. Tôi đã quen với việc tham gia ngầm, nhưng tôi sẽ bắt đầu sử dụng INNER JOINs như bạn đã đề cập. – kthiagar
Trong trường hợp này, nó không tạo ra nhiều khác biệt cho dù các tham gia ngầm hoặc bên trong được sử dụng, và có một số cuộc thảo luận khác nhau về chủ đề, ví dụ [here] (http://stackoverflow.com/questions/44917/explicit -vs-implicit-sql-joins). Quan điểm cá nhân của tôi là việc kết nối rõ ràng dễ đọc hơn, cho phép thay đổi dễ dàng hơn giữa các liên kết 'INNER' AND' OUTER' và cũng giảm khả năng kết hợp chéo ngẫu nhiên bằng cách thiếu mệnh đề where. – GarethD