SQL Server 2012 中动态数据透视 table 的聚合
Aggregation in dynamic pivot table in SQL Server 2012
我在 SQL Server 2012 中有一个 table,它有 500 万行。
Table 视图是这样的:
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)
会计算每个客户购买的每种产品的数量,但事实并非如此。它说
Invalid Column name CustomerID
相反。
您不能在选择时计算 CustomerId,试试这个:
SET @DynamicPivotQuery =
N'SELECT CustomerID, ' + @ColumnName + '
FROM table
PIVOT(count(FavouriteProduct)
FOR ProdID IN (' + @ColumnName + ')) AS PVTTable'
您需要一个列来计算,并且由于您正在选择它,因此不允许使用 CustomerId。如果 FavouriteProduct 失败,我建议你伪造一个专栏或找另一个专栏。
由于您的列比描述的多,我修改了查询。试试这个:
SET @DynamicPivotQuery =
N'SELECT CustomerID, ' + @ColumnName + '
FROM
(SELECT CustomerID, FavouriteProduct, ProdID FROM table) x
PIVOT(count(FavouriteProduct)
FOR ProdID IN (' + @ColumnName + ')) AS PVTTable'
我在 SQL Server 2012 中有一个 table,它有 500 万行。
Table 视图是这样的:
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)
会计算每个客户购买的每种产品的数量,但事实并非如此。它说
Invalid Column name CustomerID
相反。
您不能在选择时计算 CustomerId,试试这个:
SET @DynamicPivotQuery =
N'SELECT CustomerID, ' + @ColumnName + '
FROM table
PIVOT(count(FavouriteProduct)
FOR ProdID IN (' + @ColumnName + ')) AS PVTTable'
您需要一个列来计算,并且由于您正在选择它,因此不允许使用 CustomerId。如果 FavouriteProduct 失败,我建议你伪造一个专栏或找另一个专栏。
由于您的列比描述的多,我修改了查询。试试这个:
SET @DynamicPivotQuery =
N'SELECT CustomerID, ' + @ColumnName + '
FROM
(SELECT CustomerID, FavouriteProduct, ProdID FROM table) x
PIVOT(count(FavouriteProduct)
FOR ProdID IN (' + @ColumnName + ')) AS PVTTable'