首页 > 解决方案 > 没有小计的 SQL 总计

问题描述

我正在按顺序制作一个大型 SQL 报告,非常粗略地简化如下;

SELECT Supplier.SupplierName, POHeader.PODate, POHeader.PORef, POLine.LineID, SUM(Subquery.Val)
FROM Supplier INNER JOIN POHeader ON POheader.supplier = Supplier.SupplierID
    INNER JOIN POLine ON POLine.HeaderID = POHeader.PO_ID
    INNER JOIN Subquery on Subquery.POLine = POLine.Line_ID
GROUP BY Supplier.SupplierName, POHeader.PODate, POHeader.PORef, POLine.Line_ID

我希望在底部有一个总计,不是在整个报告中点缀一堆小计 - 因此我认为我不能使用ROLLUP. 当然,其中Subquery有一个子查询,实际上会有十二个,而且都非常复杂,所以我想尽可能避免将UNION所有内容汇总起来。有没有其他方法可以在报表底部放置总计行而不使用小计?

不完全确定 SQL 版本,但如果有帮助,谷歌告诉我Microsoft SQL Server Express 或 SQL Server Standard 可以与 OrderWise 一起使用

标签: sqlsql-serverrollup

解决方案


使用GROUPING SETS

SELECT Supplier.SupplierName, POHeader.PODate, POHeader.PORef, POLine.LineID, SUM(Subquery.Val)
FROM Supplier INNER JOIN
     POHeader
     ON POheader.supplier = Supplier.SupplierID JOIN
     POLine
     ON POLine.HeaderID = POHeader.PO_ID JOIN
     Subquery 
     ON Subquery.POLine = POLine.Line_ID
GROUP BY GROUPING SETS ( (Supplier.SupplierName, POHeader.PODate, POHeader.PORef, POLine.Line_ID), () )

推荐阅读