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