如何将SQL中GROUPING函数返回的0/1值修改为no/yes显示
解决方案
你可以通过标准SQL的CASE表达式对GROUPING函数的返回值做映射转换,即可实现0/1转no/yes的展示需求,改动方式如下:
- 映射规则:
GROUPING返回0表示对应列被用作当前行的分组维度,和列名xxx Used的语义匹配时对应yes;返回1表示对应列未参与本次分组,对应no,如果你的业务逻辑需要反向映射,直接调换CASE表达式里的两个取值即可 - 仅需要修改原查询中两个
GROUPING相关字段的输出逻辑,其余部分无需调整
修改后的完整查询语句:
SELECT d.department_name "department name", e.job_id "job title", SUM(e.salary) "monthly cost", CASE GROUPING(d.department_id) WHEN 0 THEN 'yes' WHEN 1 THEN 'no' END "Department ID Used", CASE GROUPING(e.job_id) WHEN 0 THEN 'yes' WHEN 1 THEN 'no' END "Job ID Used" FROM employees e JOIN departments d ON e.department_id=d.department_id GROUP BY CUBE(d.department_name, d.department_id, e.job_id) ORDER BY d.department_name, e.job_id
如果你使用的数据库(如Oracle、MySQL 8.0+、PostgreSQL等)支持IIF简化函数,也可以用更短的写法替换CASE部分:
IIF(GROUPING(d.department_id) = 0, 'yes', 'no') "Department ID Used", IIF(GROUPING(e.job_id) = 0, 'yes', 'no') "Job ID Used"
内容的提问来源于stack exchange,提问作者Rizal Maulana
相关产品推荐
相关产品推荐

