SQL分组并在不为null时选择一列

时间:2018-07-05 16:12:48

标签: sql

所以我有一个这样的表:

ID  DESCRIPTION  AGROUP
-----------------------
1   AN  
2   FI  
3   DOC 1        DOC
4   DOC 2        DOC
5   CO  
6   RI           RI

如果AGROUP列不为空,则我想选择该值并按该值分组,否则,请选择Description;在任何情况下均按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让我大跌眼镜! 谢谢。

2 个答案:

答案 0 :(得分:3)

我认为您只想要group by

select coalesce(AGROUP, DESCRIPTION) AS DES, min(id) as id
from  temp
group by coalesce(AGROUP, DESCRIPTION);

答案 1 :(得分:0)

尝试此代码

SELECT 
DISTINCT (DESCRIPTION)) AS DES 
FROM 
temp
where AGROUP IS NOT NULL
GROUP BY (AGROUP, DESCRIPTION)