2011-09-11 54 views
2

考慮這個查詢:使用PIVOT和聯合起來

SELECT [Order Details].OrderID, 
    c.CategoryName, 
    COUNT(c.CategoryID) 
FROM [Order Details] 
    INNER JOIN Products p 
     ON p.ProductID = [Order Details].ProductID 
    INNER JOIN Categories c 
     ON c.CategoryID = p.CategoryID 
GROUP BY 
    [Order Details].OrderID, 
    c.CategoryName 
ORDER BY 
    [Order Details].OrderID 

該查詢返回此這樣的結果(Usnig Northwind數據庫):

enter image description here

我想使用透視與加入得到這樣此結果:

OrderID Condiments Produce Seafood Condiments Grains/Cereals ... 
-------------------------------------------------------------------------------------- 
10250   1   1   1   0    0    ... 
10251   1   0   0   0    2    ... 
... 

我該怎麼做?

感謝

回答

5
WITH T 
    AS (SELECT [Order Details].OrderID, 
       c.CategoryName, 
       c.CategoryID 
     FROM [Order Details] 
       INNER JOIN Products p 
        ON p.ProductID = [Order Details].ProductID 
       INNER JOIN Categories c 
        ON c.CategoryID = p.CategoryID) 
SELECT * 
FROM T PIVOT (COUNT (CategoryID) FOR CategoryName IN ( 
     [Beverages], 
     [Condiments], 
     [Confections], 
     [Dairy Products], 
     [Grains/Cereals], 
     [Meat/Poultry], 
     [Produce], 
     [Seafood])) AS pvt 
ORDER BY OrderID