Union ALL SQL的SUM或Total结果

时间:2018-03-07 22:21:10

标签: sql-server sum subtotal

您好我有查询显示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)) 

如何将这两个联合55090.25和1522.8添加到第3行?为TOTALS?

2 个答案:

答案 0 :(得分:0)

这应该有效:

;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

答案 1 :(得分:0)

您的查询产生以下结果:

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

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

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

;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