SELECT CASE WHEN grouping(fskgk) = 1 THEN '合计' ELSE fskgk END AS fskgk, SUM(fssjejn) AS fssjejn, SUM(fssjeqn) AS fssjeqn , SUM(fssjedqn) AS fssjedqn, SUM(fhsjn) AS fhsjn , SUM(fhsqn) AS fhsqn, SUM(fhsdqn) AS fhsdqn , round(decode(SUM(fssjeqn), 0, 0, (SUM(fssjejn) - SUM(fssjeqn)) / SUM(fssjeqn)) * 100, 2) AS fcsbjn , round(decode(SUM(fssjedqn), 0, 0, (SUM(fssjeqn) - SUM(fssjedqn)) / SUM(fssjedqn)) * 100, 2) AS fcsbqn , round(decode(SUM(fhsqn), 0, 0, (SUM(fhsjn) - SUM(fhsqn)) / SUM(fhsqn)) * 100, 2) AS hjbjn , round(decode(SUM(fhsdqn), 0, 0, (SUM(fhsqn) - SUM(fhsdqn)) / SUM(fhsdqn)) * 100, 2) AS hjbqn FROM ( SELECT fskgk , round(SUM(fssjejn) / 10000, 2) AS fssjejn , round(SUM(fssjeqn) / 10000, 2) AS fssjeqn , round(SUM(fssjedqn) / 10000, 2) AS fssjedqn , nvl(SUM(fhsjn), 0) AS fhsjn , nvl(SUM(fhsqn), 0) AS fhsqn , nvl(SUM(fhsdqn), 0) AS fhsdqn FROM ( SELECT substr(frkrq, 1, 4) AS fyears, fskgk , SUM(车船税) AS fssjejn, 0 AS fssjeqn, 0 AS fssjedqn FROM zhzs_srfx_ss_all WHERE substr(frkrq, 1, 4)='2023' GROUP BY fskgk, substr(frkrq, 1, 4) UNION ALL SELECT substr(frkrq, 1, 4)AS fyears, fskgk , 0 AS fssjejn, SUM(车船税) AS fssjeqn, 0 AS fssjedqn FROM zhzs_srfx_ss_all WHERE substr(frkrq, 1, 4)='2022' GROUP BY fskgk, substr(frkrq, 1, 4) UNION ALL SELECT substr(frkrq, 1, 4)AS fyears, fskgk , 0 AS fssjejn, 0 AS fssjeqn, SUM(车船税) AS fssjedqn FROM zhzs_srfx_ss_all WHERE substr(frkrq, 1, 4)='2021' GROUP BY fskgk, substr(frkrq, 1, 4) ) a left JOIN ( SELECT substr(fcldjsj, 1, 4) AS years, fssqx , fclspswl AS fhsjn, '0' AS fhsqn, '0' AS fhsdqn FROM zhzs_bill_clspdjxx WHERE substr(fcldjsj, 1, 4) = '2023' GROUP BY substr(fcldjsj, 1, 4), fssqx, fclspswl UNION ALL SELECT substr(fcldjsj, 1, 4) AS years, fssqx , '0' AS fhsjn, fclspswl AS fhsqn, '0' AS fhsdqn FROM zhzs_bill_clspdjxx WHERE substr(fcldjsj, 1, 4) = '2022' GROUP BY substr(fcldjsj, 1, 4), fssqx, fclspswl UNION ALL SELECT substr(fcldjsj, 1, 4) AS years, fssqx , '0' AS fhsjn, '0' AS fhsqn, fclspswl AS fhsdqn FROM zhzs_bill_clspdjxx WHERE substr(fcldjsj, 1, 4) = '2021' GROUP BY substr(fcldjsj, 1, 4), fssqx, fclspswl ) b ON a.fyears = b.years and a.fskgk = b.fssqx GROUP BY fskgk ) GROUP BY ROLLUP (fskgk) ORDER BY CASE WHEN fskgk = '合计' THEN 1 ELSE 2 END
时间: 2024-04-27 15:25:28 浏览: 13
这是一段 SQL 查询语句,作用是对一个数据表中的数据进行聚合计算,并且按照一定的规则排序后返回结果。该查询语句主要包括以下几个部分:
1. SELECT 子句:选择需要查询的列,以及对这些列进行聚合计算的函数。
2. FROM 子句:指定需要查询的数据表。
3. WHERE 子句:指定过滤数据的条件。
4. GROUP BY 子句:根据指定的列对数据进行分组。
5. UNION ALL:将多个 SELECT 语句的结果合并成一个结果集。
6. JOIN:将两个数据表进行连接。
7. ROLLUP:对 GROUP BY 的结果进行汇总。
8. ORDER BY:根据指定的规则对结果进行排序。
具体查询的意义需要根据数据表的结构和业务需求进行分析。
相关问题
case when和grouping sets执行顺序
引用\[3\]中提到,可以通过在SELECT语句中使用CASE WHEN来判断grouping sets的行。具体来说,可以使用grouping_id函数生成的二进制数来判断不同的grouping sets。例如,可以使用CASE WHEN语句来判断grouping_id的二进制数,从而确定不同的汇总级别。\[3\]所提到的示例中,使用了rpad、reverse和bin函数来处理grouping_id的二进制数,并根据不同的情况给出相应的标签。因此,CASE WHEN语句的执行顺序是在grouping sets之后进行的。
#### 引用[.reference_title]
- *1* [grouping sets函数](https://blog.csdn.net/weixin_47621995/article/details/108112707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [SQL:grouping sets详解](https://blog.csdn.net/weixin_47198715/article/details/130727884)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [grouping sets的使用](https://blog.csdn.net/weixin_49118237/article/details/111881202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
select deptno, count(*) as c from emp0 group by grouping sets ((), (deptno));
这是一个 SQL 查询语句,用于统计 emp0 表中每个部门的员工数,同时还包括所有部门的总员工数。
其中,`grouping sets` 是一个分组函数,它可以同时对多个分组键进行分组统计。`()` 表示空分组,即不按任何条件分组,`(deptno)` 表示按照部门编号进行分组。
整个语句的含义是:先按空分组统计所有部门的总员工数,再按部门编号分组统计每个部门的员工数。最终返回两个分组的结果集合并在一起。
注意,这个查询语句可能不适用于所有的 SQL 数据库,因为不同的数据库支持的分组函数和语法可能不同。