Oracle SQL中的条件分组

罗伯特

我想按国家/地区对下表进行分组,如果国家/地区为空,则希望按州/分组。有没有办法在普通的SQL中做?如果状态没有条件,我可以分组!

+--------+-------+---------+
| EMP ID | STATE | COUNTRY |
+--------+-------+---------+
|      1 | AP    | IN      |
|      2 | UP    | IN      |
|      3 | MP    | IN      |
|      4 | NJ    | US      |
|      5 | NY    | US      |
|      6 | CA    | US      |
|      7 | PA    |         |
|      8 | PA    |         |
|      9 | CR    |         |
+--------+-------+---------+

预期产量:

+--------+-----------+---------+
| EMP ID |   STATE   | COUNTRY |
+--------+-----------+---------+
| 1,2,3  | AP,UP, MP | IN      |
| 4,5,6  | NJ,NY,CA  | US      |
| 7,8    | PA,PA     |         |
| 9      | CR        |         |
+--------+-----------+---------+
乔尔

在SELECT中使用一个case语句:

SELECT EMP_ID, STATE, CASE WHEN COUNTRY IS NULL THEN STATE ELSE COUNTRY END AS COUNTRY_STATE
FROM [TABLE]

然后,您可以使用LISTAGG()来汇总值,具体取决于您的Oracle版本

SELECT LISTAGG(EMP_ID, ',') WITHIN GROUP,
    LISTAGG(STATE, ',') WITHIN GROUP,
    COUNTRY_STATE
FROM (
SELECT EMP_ID, STATE, CASE WHEN COUNTRY IS NULL THEN STATE ELSE COUNTRY        END AS COUNTRY_STATE
FROM [TABLE] )
GROUP BY COUNTRY_STATE

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章