2016-08-24 14 views
1

動的ピボットクエリから合計列を取得する際に問題があります。私はこの結果を得た私のコ​​ードから :ここ the result without total 、私は列32,33,34,35からの総列をしたいとカラム35(縦合計欄)の後に配置SQL動的ピボットから合計列を取得

は私のコードです:

SET DATEFIRST 1; 
    DECLARE @cols AS NVARCHAR(MAX), 
    @colNames AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(DATEPART(wk,OINV.TaxDate)) 
      FROM OINV 
      WHERE YEAR(OINV.TaxDate) = 2016 AND MONTH(OINV.TaxDate) = 8 
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'') 

SELECT @colNames = STUFF((SELECT DISTINCT ', ISNULL(' + QUOTENAME(DATEPART(wk,OINV.TaxDate)) +', 0) as '+ QUOTENAME(DATEPART(wk,OINV.TaxDate)) 
       FROM OINV 
       WHERE YEAR(OINV.TaxDate) = 2016 AND MONTH(OINV.TaxDate) = 8 
       FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'') 

SET @query = 'SELECT Salesman, Cabang, '+ @colNames +' 
      FROM(SELECT 
       OSLP.SlpName as Salesman, 
       OCRD.U_STEM_BP_WHSE as Cabang, 
       SUM(OINV.DocTotal) as Achiev, 
       DATEPART(wk,OINV.TaxDate) as WeekNo 
      FROM OINV 
       INNER JOIN INV1 ON INV1.DocEntry = OINV.DocEntry 
       INNER JOIN OSLP ON OINV.SlpCode = OSLP.SlpCode 
       INNER JOIN OITM ON INV1.ItemCode = OITM.ItemCode 
       INNER JOIN OMRC ON OITM.FirmCode = OMRC.FirmCode 
       INNER JOIN OCRD ON OINV.CardCode = OCRD.CardCode 
      WHERE 
       YEAR(OINV.TaxDate) = 2016 AND MONTH(OINV.TaxDate) = 8 
      GROUP BY 
       OSLP.SlpName, 
       OCRD.U_STEM_BP_WHSE, 
       OINV.TaxDate) AS a 
      PIVOT(SUM(Achiev) 
      FOR WeekNo IN (' + @cols + ')) AS pvt 
      ORDER BY Salesman ASC' 

EXECUTE(@query); 

ご協力いただきありがとうございます。 @Antonから

使用のアドバイス、私が得たこの更新された結果: the updated result

答えて

1

変更

SET @query = 'SELECT Salesman, Cabang, '+ @colNames +' 

SET @query = 'SELECT Salesman, Cabang, '+ @colNames +', ' + @SumCol32_35 + ' 

にSubCol32_35 @は、[+ [32]」のようにする必要があります33] + [34] + [35] '

列名は固定されているか、内部に値を設定します。

SELECT @colNames = 

with CASE ... ENDステートメントは、関連する列のみを設定します。

+0

アドバイスをいただきありがとうございます。すでに私のコードにテストして、合計結果が表示されます。 1つの列に値があり、もう1つがNULLまたはゼロの場合、合計列はゼロに戻ります。私の質問でサンプルの結果が更新されました。 –

+0

心配しないで、答えを「回答済み」とマークしてください。 – Anton

+0

大丈夫ですが問題はありませんが、私の上記のコメントに関する問題についてもう一度お手伝いできますか? –

関連する問題