2017-08-04 13 views
0

ピボットを作成しようとしましたが、行がブランドとSKUで、合計が列YYMMのqtyですが、なぜエラーがスローされているのかわかりません。助けてください。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

あなたのクエリを完了するのを忘れました。

PIVOTの例については、MSDNの記事の下部を参照してください。

私はあなたがこのような何かを見て、あなたのクエリを望んでいたことを推測する:

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 
関連する問題