SQL Server 2014透视期间出错
我试图创建pivot,其中行是Brand和SKU,sum是YYMM列的qty,但我不确定它为什么会抛出错误。请帮忙 代码: 枢轴代码:SQL Server 2014透视期间出错,sql,sql-server,Sql,Sql Server,我试图创建pivot,其中行是Brand和SKU,sum是YYMM列的qty,但我不确定它为什么会抛出错误。请帮忙 代码: 枢轴代码: select * from (select BRAND, sku, QTY, YYMM from @TABLE) src pivot (sum(QTY) for [Year Month] 您忘记完成查询了 请参见文章底部的PIVOT示例 我猜您希望您的查询看起来像这样: SELECT * FROM(
select *
from
(select
BRAND, sku, QTY, YYMM
from @TABLE) src
pivot
(sum(QTY)
for [Year Month]
您忘记完成查询了 请参见文章底部的
PIVOT
示例
我猜您希望您的查询看起来像这样:
SELECT *
FROM(
SELECT BRAND, sku, QTY, YYMM
FROM @TABLE
) AS src
PIVOT(
sum(QTY)
for [YYMM] IN( [2015-January], [2016-January], [2017-January] /* add other moneths here */ )
) AS Pivoted
您忘记完成查询了 请参见文章底部的
PIVOT
示例
我猜您希望您的查询看起来像这样:
SELECT *
FROM(
SELECT BRAND, sku, QTY, YYMM
FROM @TABLE
) AS src
PIVOT(
sum(QTY)
for [YYMM] IN( [2015-January], [2016-January], [2017-January] /* add other moneths here */ )
) AS Pivoted
我们可以将其作为动态sql
DECLARE @Column NVARCHAR(max),
@Column2 NVARCHAR(max),
@Sql NVARCHAR(max)
SELECT @Column = Stuff((SELECT DISTINCT ', '
+ Quotename(Cast(yymm AS VARCHAR(20)))
FROM #table
FOR xml path ('')), 1, 1, '')
SELECT @Column2 = Stuff((SELECT DISTINCT ', ' + 'ISNULL('
+ Quotename(Cast(yymm AS VARCHAR(20)))
+ ','
+ '''0''' + ') AS '
+ Quotename(Cast(yymm AS VARCHAR(20)))
FROM #table
FOR xml path ('')), 1, 1, '')
SET @Sql='
SELECT BRAND ,sku,'+@Column2+'
FROM(
SELECT *
FROM #TABLE
) AS src
PIVOT(
sum(QTY)
for [YYMM] IN('+@Column+')
) AS Pivoted
'
PRINT @Sql
EXEC(@Sql)
结果
BRAND sku 2015-January 2016-January 2017-January 2018-January 2019-January
--------------------------------------------------------------------------------------------------------
abott 104590691 0 0 0 0 10
abott 104591168 2 0 0 0 0
abott 10467011A 0 0 0 2 0
GSK 104580709 0 2 0 0 0
RANBAXCY 104720038 0 0 2 0 0
我们可以将其作为动态sql
DECLARE @Column NVARCHAR(max),
@Column2 NVARCHAR(max),
@Sql NVARCHAR(max)
SELECT @Column = Stuff((SELECT DISTINCT ', '
+ Quotename(Cast(yymm AS VARCHAR(20)))
FROM #table
FOR xml path ('')), 1, 1, '')
SELECT @Column2 = Stuff((SELECT DISTINCT ', ' + 'ISNULL('
+ Quotename(Cast(yymm AS VARCHAR(20)))
+ ','
+ '''0''' + ') AS '
+ Quotename(Cast(yymm AS VARCHAR(20)))
FROM #table
FOR xml path ('')), 1, 1, '')
SET @Sql='
SELECT BRAND ,sku,'+@Column2+'
FROM(
SELECT *
FROM #TABLE
) AS src
PIVOT(
sum(QTY)
for [YYMM] IN('+@Column+')
) AS Pivoted
'
PRINT @Sql
EXEC(@Sql)
结果
BRAND sku 2015-January 2016-January 2017-January 2018-January 2019-January
--------------------------------------------------------------------------------------------------------
abott 104590691 0 0 0 0 10
abott 104591168 2 0 0 0 0
abott 10467011A 0 0 0 2 0
GSK 104580709 0 2 0 0 0
RANBAXCY 104720038 0 0 2 0 0
您在查询结束时缺少)
,但是[Year-Month]的也有问题。请编辑您的问题添加错误和所需结果。您还可以阅读有关PIVOT的信息。什么错误?!?不要嘲笑我们有一个错误,然后你实际上没有告诉我们它是什么-记住:我们无法阅读你的屏幕,也无法理解你的想法-你必须告诉我们,并在这里提供它,以便我们可以提供帮助!您在查询结束时缺少)
,但是[Year-Month]
的也有问题。请编辑您的问题添加错误和所需结果。您还可以阅读有关PIVOT的信息。什么错误?!?不要嘲笑我们有一个错误,然后你实际上没有告诉我们它是什么-记住:我们无法阅读你的屏幕,也无法理解你的想法-你必须告诉我们,并在这里提供它,以便我们可以提供帮助!