SQL进行分组,并在不为null时选择列
我有一张这样的桌子:SQL进行分组,并在不为null时选择列,sql,Sql,我有一张这样的桌子: ID DESCRIPTION AGROUP ----------------------- 1 AN 2 FI 3 DOC 1 DOC 4 DOC 2 DOC 5 CO 6 RI RI 如果AGROUP列不为null,我希望选择并按该值分组,否则选择描述;在任何情况下,按ID排序。我想要的结果是: ID RESULT ----------------------- 1 AN
ID DESCRIPTION AGROUP
-----------------------
1 AN
2 FI
3 DOC 1 DOC
4 DOC 2 DOC
5 CO
6 RI RI
如果AGROUP列不为null,我希望选择并按该值分组,否则选择描述;在任何情况下,按ID排序。我想要的结果是:
ID RESULT
-----------------------
1 AN
2 FI
3 DOC
5 CO
6 RI
我尝试先创建一个子查询,使用
SELECT
DISTINCT (NVL(AGROUP, DESCRIPTION)) AS DES
FROM
temp
GROUP BY NVL(AGROUP, DESCRIPTION)
然后添加外部查询:
SELECT
ID,
DES
FROM
(
SELECT DISTINCT (NVL(AGROUP, DESCRIPTION)) AS DES
FROM
temp
GROUP BY NVL(AGROUP, DESCRIPTION)
) T1
JOIN TEMP T2 ON (T1.DES = T2.AGROUP OR T1.DES = T2.DESCRIPTION)
ORDER BY ID
;
但我收到两次DOC:
1 AN
2 FI
3 DOC
4 DOC
5 CO
6 RI
SQL让我头晕目眩!
谢谢。我想你只需要
分组:
select coalesce(AGROUP, DESCRIPTION) AS DES, min(id) as id
from temp
group by coalesce(AGROUP, DESCRIPTION);
试试这个代码
SELECT
DISTINCT (DESCRIPTION)) AS DES
FROM
temp
where AGROUP IS NOT NULL
GROUP BY (AGROUP, DESCRIPTION)
天哪!合并@瓦卡尼诺。我非常喜欢ANSI标准功能,除非有很好的理由偏离。你是对的@Gordon,我只是注意到它是多么简单的解决方案,我找不到它。谢谢。不,这不符合要求,您只选择组不为空的行。