Warm tip: This article is reproduced from serverfault.com, please click

sql-按汇总查询分组

(sql - Group by query with rollup)

发布于 2020-11-28 01:18:33

我正在尝试进行查询,以向我显示每个地区,然后进行计数以查看每个地区我有多少马诺合同,但是不知何故我遇到了错误 ROLLUP (BO2.area)

这是查询

SELECT
  CASE WHEN BO2.area IS NULL THEN ISNULL(BO2.area, 'TOTAL') ELSE BO2.area END Area,
  COUNT(BO.status = 'INSTALLED') Contracts
FROM
  BO2
  JOIN BO ON BO.bostamp = BO2.bo2stamp
GROUP BY
  ROLLUP (BO2.area)
Questioner
pauLo_0liveira
Viewed
22
David Browne - Microsoft 2020-11-28 09:20:30

应该使用GROUPING而不是null检查,并且在聚合内需要一个CASE表达式。所以:

SELECT
  CASE WHEN GROUPING(BO2.area)=1 THEN 'TOTAL' ELSE BO2.area END Area,
  SUM( CASE WHEN BO.status = 'INSTALLED' THEN 1 ELSE 0 END ) Contracts
FROM
  BO2
  JOIN BO ON BO.bostamp = BO2.bo2stamp
GROUP BY
  ROLLUP (BO2.area)