Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL进行分组,并在不为null时选择列_Sql - Fatal编程技术网

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,我只是注意到它是多么简单的解决方案,我找不到它。谢谢。不,这不符合要求,您只选择组不为空的行。