我有这样的table:
Group - combination of TypeId and ZoneId
ID TypeID ZoneID
-- -- --
1 1 1
2 1 2
3 2 1
4 2 2
5 2 3
6 3 3
Object
ID GroupId
-- --
1 1
2 1
3 2
4 3
5 3
6 3
我想构建一个查询,用于按typeid和zoneid对所有这些表进行分组,其中包含具有这些字段的特定组合的对象数:
ResultTable
TypeId ZoneId Number of objects
-- -- --
1 1 2
1 2 1
2 1 3
2 2 1
2 3 0
3 3 0
查询:
SELECT
group.TypeId,
group.ZoneId,
COUNT(obj.ID) as NumberOfObjects
FROM[Group] group
JOIN[Object] obj on obj.GroupID = group.ID
GROUP BY group.TypeId, group.ZoneId ORDER BY group.TypeId
但是!我想在每个组后面添加summary行,使其类似于:
ResultTableWithSummary
TypeId ZoneId Number of objects
-- -- --
1 1 2
1 2 1
Summary (empty field) 3
2 1 3
2 2 1
2 3 0
Summary (empty field) 4
3 3 0
Summary (empty field) 0
问题是我可以使用group by rollup(group.typeid,group.zoneid):
TypeId ZoneId Number of objects
-- -- --
1 1 2
1 2 1
1 null 3
2 1 3
2 2 1
2 3 0
2 null 4
3 3 0
3 null 0
但我不能或不知道如何将摘要行中的not null group.typeid更改为“summary”。我该怎么做?
1条答案
按热度按时间f3temu5u1#
最简单的方法是
coalesce()
,但您需要确保类型匹配:这不是最通用的方法,因为它不处理实际的
NULL
中的值GROUP BY
钥匙。在这种情况下,这似乎不是问题。如果是的话,你可以用CASE
带的表达式GROUPING()
.编辑:
对于您的特定变体(我觉得很奇怪),您可以使用:
实际上,我会使用类似
COALESCE()
在这两列中,所以我不会丢失关于摘要的信息。