2017-10-01 4 views
2

berechnen Ich habe eine Pivot-Abfrage, die die Summe der spezifischen Transaktion berechnen und ich möchte zusätzliche Spalte, die die Summe aller Transaktionen für jede ID berechnen, aber meine gesamte Spalte geben mir Nullen nur für alle IDs, kann irgendjemand dabei helfen? das ist meine Frage:Fehler mit Summe Spalte, die die Summe der Zeilenwerte

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 

und das ist mein Ausgang enter image description here

Antwort

2

Eine Möglichkeit, die gesamte Spalte haben, wird Sie Ihre Abfrage als Sub-Abfrage, dann erstellen Sie die Berechnung für die gesamte auf die verwenden können äußere Abfrage Oder Sie CTE auch

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

genial Dank für die Hilfe verwenden, es funktioniert gut, aber können Sie beschreiben, was (mit) zu tun ? und was ist mein Fehler in meinem Code? – Believer

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

das ist ein einfaches Beispiel für CTE-Syntax verwenden können und wie Sie es

Verwandte Themen