2017-10-01 18 views
2

特定のトランザクションの合計を計算するピボットクエリを作成しました。すべてのトランザクションの合計を計算する列を追加したいのですが、すべてのIDに対してのみnullがあります。だれかがそれを手助けすることができますか? これは私のクエリです:エラーRowの値の合計を計算する合計の列で

SELECT 
    AccountID 
, OpeningBalance 
, OpeningBalanceStatus 
, ISNULL([CI], 0) AS CI 
, ISNULL([CO], 0) AS CO 
, ISNULL([SI], 0) AS SI 
, ISNULL([CN], 0) AS CN 
, ISNULL([PI], 0) AS PI 
, ISNULL([JE], 0) AS JE 
, ISNULL([NR], 0) AS NR 
, [OpeningBalance]+[CI]+[CO]+[SI]+[CN]+[PI]+[JE]+[NR] AS TOTAL 
FROM (SELECT 
    Accounting.AccDocumentDetails.AccountID 
    , Accounting.AccDocumentDetails.AmountStatus 
    , Accounting.AccAccounts.AccountType 
    , Accounting.AccDocumentHeader.CodeTypePart 
    , AccAccounts_1.OpeningBalance 
    , AccAccounts_1.OpeningBalanceStatus 
    , CASE 
     WHEN AmountStatus = 'd' 
      THEN (Amount * 1) 
     WHEN AmountStatus = 'C' 
      THEN (Amount * - 1) 
     END AS NewAmount FROM Accounting.AccDocumentDetails 
INNER JOIN Accounting.AccAccounts 
     ON Accounting.AccDocumentDetails.AccountID = Accounting.AccAccounts.ID 
INNER JOIN Accounting.AccChartOfAccounts 
     ON Accounting.AccChartOfAccounts.ID = Accounting.AccAccounts.ParentNode 
INNER JOIN Accounting.AccDocumentHeader 
     ON Accounting.AccDocumentDetails.AccDocumentHeaderID = Accounting.AccDocumentHeader.ID 
INNER JOIN Accounting.AccAccounts AS AccAccounts_1 
     ON Accounting.AccDocumentDetails.AccountID = AccAccounts_1.ID) AS PivotSelect PIVOT(SUM(NewAmount) FOR CodeTypePart IN ([ci],[CO],[SI],[CN],[PI],[JE],[NR])) AS PVT 

、これは、合計列を持っている enter image description here

答えて

2

一つの方法は、あなたが、その後の合計の計算を作成し、サブクエリとしてクエリを使用することができている私の出力であります外部クエリ。それともあなたが同様に

WITH t_pvt AS (
SELECT AccountID 
     ,OpeningBalance 
     ,OpeningBalanceStatus 
     ,ISNULL([CI], 0) AS CI 
     ,ISNULL([CO], 0) AS CO 
     ,ISNULL([SI], 0) AS SI 
     ,ISNULL([CN], 0) AS CN 
     ,ISNULL([PI], 0) AS PI 
     ,ISNULL([JE], 0) AS JE 
     ,ISNULL([NR], 0) AS NR  
    FROM (SELECT Accounting.AccDocumentDetails.AccountID 
       ,Accounting.AccDocumentDetails.AmountStatus 
       ,Accounting.AccAccounts.AccountType 
       ,Accounting.AccDocumentHeader.CodeTypePart 
       ,AccAccounts_1.OpeningBalance 
       ,AccAccounts_1.OpeningBalanceStatus 
       ,CASE WHEN AmountStatus = 'd' 
         THEN (Amount * 1) 
         WHEN AmountStatus = 'C' 
         THEN (Amount * - 1) 
       END AS NewAmount 
      FROM Accounting.AccDocumentDetails 
     INNER JOIN Accounting.AccAccounts 
      ON Accounting.AccDocumentDetails.AccountID = Accounting.AccAccounts.ID 
     INNER JOIN Accounting.AccChartOfAccounts 
      ON Accounting.AccChartOfAccounts.ID = Accounting.AccAccounts.ParentNode 
     INNER JOIN Accounting.AccDocumentHeader 
      ON Accounting.AccDocumentDetails.AccDocumentHeaderID = Accounting.AccDocumentHeader.ID 
     INNER JOIN Accounting.AccAccounts AS AccAccounts_1 
      ON Accounting.AccDocumentDetails.AccountID = AccAccounts_1.ID) AS PivotSelect 
PIVOT (SUM(NewAmount) 
     FOR CodeTypePart IN ([ci],[CO],[SI],[CN],[PI],[JE],[NR])) AS PVT 
) 

SELECT * 
     ,[OpeningBalance]+[CI]+[CO]+[SI]+[CN]+[PI]+[JE]+[NR] AS TOTAL 
    FROM t_pvt 
+0

素晴らしいおかげで、それをどのように使用できるか、それを行うには、正常に動作しますが、あなたは何を(に)記述することができます?と私のコードで私のエラーは何ですか? – Believer

1
With CTE 
AS 
(select column1 as c1 from tbl) 
Select c1 from CTE 

は、CTE構文の簡単な例をthatsのCTEを使用することができますし、あなたが助けを

関連する問題