【发布时间】:2018-08-12 05:22:10
【问题描述】:
我有这个 SQL 代码
SELECT TOP (100) PERCENT
dbo._SHIFT._SHIFTNAME AS [Shift Name], dbo._TANK._TANKNAME AS [Tank Name],
dbo._NOZZLE._NOZZLENAME AS [Nozzle Name],
dbo._SHIFTENTRYDET._OPENING AS Opening, dbo._SHIFTENTRYDET._CLOSING AS Closing,
SUM(dbo._SHIFTENTRYDET._TOTALSALE) AS [Total Sale],
dbo._SHIFTENTRYDET._RATE AS Rate,
CASE
WHEN GROUPING(dbo._SHIFT._SHIFTNAME) = 1
THEN NULL
WHEN GROUPING(dbo._TANK._TANKNAME) = 1
THEN NULL
ELSE SUM(dbo._SHIFTENTRYDET._TOTALAMOUNT)
END AS Amount
FROM
dbo._NOZZLE
RIGHT OUTER JOIN
dbo._SHIFTENTRYDET ON dbo._NOZZLE._NOZZLEID_PK = dbo._SHIFTENTRYDET._NOZZLEID_PK
LEFT OUTER JOIN
dbo._TANK ON dbo._SHIFTENTRYDET._TANKID_PK = dbo._TANK._TANKID_PK
RIGHT OUTER JOIN
dbo._SHIFTENTRY ON dbo._SHIFTENTRYDET._SHIFTENTRYID_PK = dbo._SHIFTENTRY._SHIFTENTRYID_PK
LEFT OUTER JOIN
dbo._SHIFT ON dbo._SHIFTENTRY._SHIFTID_PK = dbo._SHIFT._SHIFTID_PK
WHERE
(dbo._SHIFTENTRY._ISDELETED = N'1')
AND (dbo._SHIFT._ISDELETED = N'1')
AND (dbo._SHIFTENTRYDET._ISDELETED = N'1')
GROUP BY GROUPING SETS
((dbo._SHIFT._SHIFTNAME, dbo._TANK._TANKNAME, dbo._NOZZLE._NOZZLENAME, dbo._SHIFTENTRYDET._OPENING, dbo._SHIFTENTRYDET._CLOSING, dbo._SHIFTENTRYDET._RATE), (dbo._SHIFT._SHIFTNAME, dbo._TANK._TANKNAME))
结果
但我想要以下结果
我使用GROUP BY GROUPING SETS、GROUP BY ROLLUP、GROUP BY CUBE,但没有运气。
如果我删除 GROUP BY 和 GROUPING SETS 等,简单的数据将如下所示
Excel 文件 Google Drive 链接:https://drive.google.com/open?id=1DgyI_7-p1l7n1KjeAnf1DerQTGLJC-wB
Excel 文件有 3 张表
- 样本数据,这里是没有分组的数据
- 预期结果
- 分组集结果
【问题讨论】:
-
你应该简化这个例子,让其他人更容易理解。
-
@GordonLinoff 完成。请看一下
-
是的,这更详细。当然,您可以有一个包含数据的表来表示问题。
-
提供示例数据而不是屏幕截图。另外,为什么会有“TOP (100) Percent”?
-
@Cool_Br33ze
TOP (100) Percent由 SQL Managent 工作室添加,可能是我订购时添加的
标签: sql sql-server sql-server-2008 group-by grouping