【问题标题】:Error With total Column which calculate the summation of Row values计算行值总和的总列错误
【发布时间】:2018-03-13 00:40:28
【问题描述】:

我创建了一个数据透视查询来计算特定交易的总和,我想添加额外的列来计算每个 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

【问题讨论】:

    标签: sql sql-server tsql pivot aggregate-functions


    【解决方案1】:
    With CTE
    AS
    ( select column1 as c1 from tbl)
    Select c1 from CTE
    

    这是一个简单的 CTE 语法示例以及如何使用它

    【讨论】:

      【解决方案2】:

      获得总计列的一种方法是您可以将查询用作子查询,然后在外部查询上创建总计的计算。或者你也可以使用 cte

      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
      

      【讨论】:

      • 非常感谢您的帮助,它工作正常,但您能描述一下(with)做什么吗?我的代码中的错误是什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 2018-09-15
      • 2019-03-22
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      相关资源
      最近更新 更多