问题是通过在查询的适当聚合级别添加标签来正确地格式化查询结果。
下面是Oracle SQL代码:
SELECT NVL(TO_CHAR(CITY.COUNTRY), 'Summary-total:') VISITED_COUNTRY,
NVL(TO_CHAR(CITY.NAME), 'Summary-country:') CITY,
NVL(TO_CHAR(ACCOMMODATIONTYPE.NAME), 'Summary-city:') TYPE,
SUM(VISIT.NUMBER_OF_VISITORS) VISITORS,
SUM(VISIT.PROFIT) AS PROFIT
FROM VISIT
JOIN CITY ON VISIT.ID_CITY = CITY.ID_CITY
JOIN ACCOMMODATIONTYPE ON VISIT.ID_TYPE = ACCOMMODATIONTYPE.ID_TYPE
GROUP BY
ROLLUP(CITY.COUNTRY, CITY.NAME, ACCOMMODATIONTYPE.NAME)
ORDER BY
VISITED_COUNTRY, CITY, TYPE;
它给了我以下结果:
但是我应该得到这样的结果(行中只有一个标签!)
1条答案
按热度按时间z8dt9xmd1#
您可以使用case表达式来决定何时添加标签,从而实现更多控制:
如果您愿意,也可以将大小写表达式与
NVL
或COALESCE
混合使用以简化它:fiddle
它是主题“SQLforOLAP”中OracleSQL学习任务
在这种情况下,可能更合适的方法是查看分组ID,并使用它们来确定何时应用标签,就像@serg建议的那样。如果你正在学习一些东西,那么任务通常希望你使用你最近被介绍过的东西。
grouping()
的类似方法:fiddle