【问题标题】:SUM or Total results from Union ALL SQL来自 Union ALL SQL 的 SUM 或总结果
【发布时间】:2018-03-07 22:21:10
【问题描述】:

您好,我有查询要显示 2 个结果:

SELECT TOP (100) PERCENT CONVERT(varchar, GETDATE(), 103) AS Date, 
       'Sales Orders' AS Type, COUNT(SalesOrderID) AS Qty, 
       ISNULL(ROUND(SUM(SubTotal), 2),0) AS [Total Ex GST]
FROM  dbo.SalesOrder
WHERE  (DateCreated > CONVERT(int, GETDATE()-0.5))

UNION ALL

SELECT TOP (100) PERCENT CONVERT(varchar, GETDATE(), 103) AS Date,
       'Invoices', COUNT(InvoiceID) AS Qty, 
       ISNULL(ROUND(SUM(SubTotal),2),0) AS [Total Ex GST]
FROM         dbo.Invoice
WHERE  (DateCreated > CONVERT(int, GETDATE()-0.5)) 

如何添加这 2 个联合 55090.25 和 1522.8 来生成第三行?总计?

【问题讨论】:

  • 你能告诉我们查询吗?
  • 请编辑您的问题以添加它,以便您可以正确格式化它并且其他用户将能够看到它
  • @LioraHaydont 编辑它:)
  • 为什么需要查询来计算总数?你不能在应用程序级别处理这个吗?
  • @GiorgosBetsos 不幸的是没有,所以我需要显示一个自动报告,所以一旦我看到这两个值的结果,在第三行,我也可以看到这两个值的总和 :)

标签: sql-server sum subtotal


【解决方案1】:

这应该可行:

;WITH CTE
AS
(
    SELECT     TOP (100) PERCENT CONVERT(varchar, GETDATE(), 103) AS Date, 'Sales Orders' AS Type, COUNT(SalesOrderID) AS Qty, ISNULL(ROUND(SUM(SubTotal), 2),0) AS [Total Ex GST]
    FROM         dbo.SalesOrder
    WHERE     (DateCreated > CONVERT(int, GETDATE()-0.5))
    UNION
    SELECT     TOP (100) PERCENT CONVERT(varchar, GETDATE(), 103) AS Date, 'Invoices', COUNT(InvoiceID) AS Qty, ISNULL(ROUND(SUM(SubTotal), 2),0) AS [Total Ex GST]
    FROM         dbo.Invoice
    WHERE     (DateCreated > CONVERT(int, GETDATE()-0.5)) 
),
TotalCTE AS
(
    SELECT CONVERT(varchar, GETDATE(), 103) AS Date, 'Total' AS Type, SUM(Qty) AS Qty, SUM([Total Ex GST]) AS [Total Ex GST] FROM CTE
)
SELECT Date, [Type], Qty, [Total Ex GST] FROM CTE
UNION
SELECT Date, [Type], Qty, [Total Ex GST] FROM TotalCTE;

这是一个有效的小提琴: http://sqlfiddle.com/#!18/eb9a0/2/0

【讨论】:

    【解决方案2】:

    您的查询产生以下结果:

    Date        Type          Qty  [Total Ex GST]
    ---------------------------------------------
    2018-03-08  Sales Orders  100  55090.25  
    2018-03-08  Invoices      200  1522.8
    

    为了完整起见,我添加了一些任意的Qty 值。

    您可以将查询包装在公用表表达式中,并对CTE 的结果集执行GROUP BY GROUPING SETS:

    ;WITH CTE AS (
       ... your query here ...
    )
    SELECT [Date], 
           COALESCE(Type, 'Both') AS Type, 
           SUM(Qty) AS Qty, 
           Sum(Total) AS Total
    FROM CTE
    GROUP BY GROUPING SETS (([Date], Type),(Date))
    

    Demo here

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      相关资源
      最近更新 更多