简体   繁体   English

SQL查询-是否可以向该查询添加总计?

[英]SQL Query - is it possible to add a Grand Total to this query?

SQL Server 2016 Enterprise, using SSMS... 使用SSMS的SQL Server 2016 Enterprise ...

I have a query as thus: 我有这样的查询:

WITH SUMS AS (
SELECT
    dbo.BillingActivity.BillingCodeId AS [Billing Code],
    dbo.Clients.ClientName AS [Client Name],
    dbo.BillingCodes.Name AS [Billing Code Name]
    , SUM(CASE WHEN Details LIKE '%"LW":"True"%' THEN 1 ELSE 0 END) AS [LW]
    , SUM(CASE WHEN Details LIKE '%"MHN":"True"%' THEN 1 ELSE 0 END) AS [MHN]
    , SUM(CASE WHEN Details LIKE '%"EPAP":true%' THEN 1 ELSE 0 END) AS [EPAP]
    , SUM(CASE WHEN Details LIKE '%"EPAP (old)":"True"%' THEN 1 ELSE 0 END) AS [EPAPOld]
FROM dbo.BillingActivity
INNER JOIN dbo.BillingCodes ON dbo.BillingActivity.BillingCodeId=dbo.BillingCodes.Id
INNER JOIN dbo.Clients ON dbo.BillingActivity.ClientId=dbo.Clients.ID
WHERE dbo.BillingActivity.RecordDateTime BETWEEN '2017-11-09' AND '2017-11-10'
GROUP BY dbo.BillingActivity.BillingCodeId, dbo.BillingCodes.Name, dbo.Clients.ClientName)
SELECT 
    [Billing Code],
    [Client Name],
    [Billing Code Name],
    [LW],
    [MHN],
    [EPAP],
    [EPAPOld],
    SUM(LW+MHN+EPAP+EPAPOld) OVER (PARTITION BY [Billing Code Name]) AS [Billing Code Total]
FROM SUMS
ORDER BY [Client Name] ASC, [Billing Code Name] ASC

Which gives me the following results: (the table refused to line up correctly on here, thus the image: 这给了我以下结果:(表格拒绝在此处正确排列,因此图像:

在此处输入图片说明

What I'm wondering whether is possible (internet research thus far would say no) is whether I can add to this query to create a 9th column which will show the total of all amounts in the column Billing Code Total. 我想知道是否有可能(到目前为止,互联网研究会拒绝)是我是否可以添加到该查询中以创建第9列,该列将在“计费代码总计”列中显示所有金额的总计。 It doesn't matter what row it shows in, nor does it matter if the same amount shows in all rows, I just need to see the total of that column somewhere. 它显示在哪一行都无关紧要,如果所有行中都显示相同的数量也没关系,我只需要在某处查看该列的总数即可。

Please note that the Billing Code Total name is an alias. 请注意,“帐单代码总计”名称是别名。 This proposes an additional challenge. 这提出了另外的挑战。

Many thanks. 非常感谢。

You don't need an over() clause for the billing code total but you do for the other column you want, something like this: billing code total不需要over()子句,但您想要的另一列则需要它,如下所示:

WITH
      sums AS (
                  SELECT
                        dbo.BillingActivity.BillingCodeId                                     AS [billing code]
                      , dbo.Clients.ClientName                                                AS [client name]
                      , dbo.BillingCodes.Name                                                 AS [billing code name]
                      , SUM(CASE WHEN Details LIKE '%"LW":"True"%' THEN 1 ELSE 0 END)         AS [lw]
                      , SUM(CASE WHEN Details LIKE '%"MHN":"True"%' THEN 1 ELSE 0 END)        AS [mhn]
                      , SUM(CASE WHEN Details LIKE '%"EPAP":true%' THEN 1 ELSE 0 END)         AS [epap]
                      , SUM(CASE WHEN Details LIKE '%"EPAP (old)":"True"%' THEN 1 ELSE 0 END) AS [epapold]
                  FROM dbo.BillingActivity
                  INNER JOIN dbo.BillingCodes ON dbo.BillingActivity.BillingCodeId = dbo.BillingCodes.Id
                  INNER JOIN dbo.Clients ON dbo.BillingActivity.ClientId = dbo.Clients.ID
                  WHERE dbo.BillingActivity.RecordDateTime BETWEEN '2017-11-09' AND '2017-11-10'
                  GROUP BY
                        dbo.BillingActivity.BillingCodeId
                      , dbo.BillingCodes.Name
                      , dbo.Clients.ClientName
            )
SELECT
      [Billing Code]
    , [Client Name]
    , [Billing Code Name]
    , [LW]
    , [MHN]
    , [EPAP]
    , [EPAPOld]
    , LW + MHN + EPAP + EPAPOld AS [billing code total]
    , SUM(LW + MHN + EPAP + EPAPOld) OVER() as all_sum
FROM sums
ORDER BY
      [Client Name] ASC
    , [Billing Code Name] ASC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM