我写了这个查询来生成数据透视表:
SELECT *
FROM (
SELECT
ItemName_AR as [ItemName],
NetValue as Amount
FROM view_WH_CompanyTransactionDtl
) as s
PIVOT
(
SUM(Amount)
FOR [ItemName] IN (select ItemName_AR from WH_Items)
)AS pvt
但它会导致
中的以下错误关键字“select”附近的语法不正确。
在此声明中
FOR [ItemName] IN (select ItemName_AR from WH_Items)
答案 0 :(得分:2)
不幸的是,您可能不会使用select语句来提供各种值(unpivoted form)= columns(pivoted form)。你可以使用
IN ([value1],[value2])
等
或考虑动态解决方案,这是一个链接:
SQL Server Dynamic Pivot Column Names
答案 1 :(得分:0)
您无法像这样创建动态SQL PIVOT。你可以试试这样的......
DECLARE @cols AS NVARCHAR(max) = Stuff((SELECT DISTINCT ',' + Quotename(ItemName_AR)
FROM WH_Items
FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
DECLARE @query AS NVARCHAR(max) = 'SELECT *
FROM (
SELECT
ItemName_AR as [ItemName],
NetValue as Amount
FROM view_WH_CompanyTransactionDtl
) as s
PIVOT
(
SUM(Amount)
FOR [ItemName] IN ('+ @cols +')
)AS pvt';
EXECUTE(@query)