我有一個SQL Server 2012中有500萬行的表。SQL Server 2012動態數據透視表中的聚合
表的看法是這樣的:
CustomerID ProdID FavouriteProduct
1 A A
1 A A
1 A A
1 B A
1 A A
1 A A
1 A A
1 B A
2 A C
2 AN C
2 G C
2 C C
2 C C
2 F C
2 D C
2 C C
正如你可以看到有這麼多不同的產品。
我已經寫了一個查詢:
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
--Get distinct values of the PIVOT Column
SELECT
@ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME(prodID)
FROM
(SELECT DISTINCT ProdID FROM Table) AS Prods
--Prepare the PIVOT query using the dynamic
SET @DynamicPivotQuery =
N'SELECT CustomerID, ' + @ColumnName + '
FROM table
PIVOT(count(CustomerID)
FOR ProdID IN (' + @ColumnName + ')) AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery
通常情況下,我希望count(*)
或Count(SubID)
也要算每個客戶各買產品的數量,但事實並非如此。它說
無效列名客戶ID
代替。
表中還有另一列表示每次購買產品的數量。但是當我把總和(數量)進行聚合。它對於所有不正確的產品返回1。 @ t-clausen.dk – Ariox66 2015-02-09 13:52:05
我覺得你用count而不是sum。另外我想這是你需要的SELECT DISTINCT prodID FROM Table而不是DISTINCT City – 2015-02-09 13:55:58
真正的表是完全不同的。我將名稱更改爲客戶和產品,以使其更簡單。我相信我寫了總和(數量)@ t-clausen.dk – Ariox66 2015-02-09 14:00:43