2017-10-01 1 views
2

특정 트랜잭션의 합계를 계산하는 피벗 쿼리를 만들었습니다. 모든 ID에 대해 모든 트랜잭션의 합계를 계산하는 추가 열을 추가하려고합니다. 모든 ID에 대해서만 널입니다. 어느 누구도 그걸 도울 수 있습니까? 다음의 총에 대한 계산을 만들오류 행 값의 합계를 계산하는 총 열이

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 구문의 간단한 예를 먹으 렴 CTE를 사용할 수 있습니다 당신이 도움을

관련 문제