2017-08-04 34 views
0

我正在嘗試創建數據庫,其中行是品牌和SKU,總和是列YYMM的數量,但我不確定它爲什麼會拋出錯誤。請幫忙。在SQL Server 2014中的PIVOT期間出錯

代碼:

DECLARE @TABLE TABLE 
(
    SKU VARCHAR(10), 
    YYMM VARCHAR(50), 
    BRAND VARCHAR(50), 
    QTY INT 
) 

INSERT INTO @TABLE 
    SELECT '104591168', '2015-January', 'abott', 2 UNION ALL 
    SELECT '104580709', '2016-January', 'GSK', 2 UNION ALL 
    SELECT '104720038', '2017-January', 'RANBAXCY', 2 UNION ALL 
    SELECT '10467011A', '2018-January', 'abott', 2 UNION ALL 
    SELECT '104590691', '2019-January', 'abott', 10 

樞軸代碼:

select * 
from 
    (select 
     BRAND, sku, QTY, YYMM 
    from @TABLE) src 
pivot 
    (sum(QTY) 
    for [Year Month] 
+1

你缺少' )'在查詢結束時,但'[Year Month]'也存在問題。請編輯您的問題添加錯誤和期望的結果。你也可以閱讀關於'PIVOT'([link](https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot))。 – Rokuto

+2

***什麼***錯誤?!?請不要逗我們*有錯誤*然後你實際上並沒有告訴我們**它是什麼 - 請記住:我們**不能**讀你的屏幕或你的頭腦 - 你必須**告訴我們**並在此提供,以便我們幫助! –

回答

2

你忘了完成查詢。

請參閱MSDN文章的底部,瞭解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 
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,'[email protected]+' 
FROM(
    SELECT * 
    FROM #TABLE 
) AS src 
PIVOT(
    sum(QTY) 
    for [YYMM] IN('[email protected]+') 
) 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