首页 > 解决方案 > 如何分组并获得特定的输出

问题描述

我有一个如下查询

select P.Id, P.cId,case P.orgid when 0 then 'N/A' else convert(varchar(10), P.orgid) end orgid, P.dateCompleted, P.dateP, P.dateEff 
from base P left
outer join (
    select P.noteId, P.dateCompleted, P.dateP, P.dateEff
    from base P
    where P.dateDeleted is null and P.isUpdate = 'N'
) O on P.orgid = O.Id 

目前我得到如下输出:

Id    cID     orgid        datecompleted        dateP         dateeff 
 1    23        N/A            07/16/2017     07/16/2017    07/16/2017
 2    24        N/A             "              "                "
 3    24        N/A             "              "                "
 4    23         1              "              "                "
 5    27         2              "              "                "

但我的预期输出是:

Id    cID     orgid        datecompleted        dateP         dateeff 
 1    23        N/A            07/16/2017     07/16/2017    07/16/2017
 4    23         1              "              "                "
 2    24        N/A             "              "                "
 5    27         2              "              "                "
 3    24        N/A             "              "                "

我已经尝试过 group by 但由于其他选择参数,但我无法获得此输出。

请给我建议。

标签: sql

解决方案


您可以在 中使用逻辑order by

order by coalesce(nullif(p.orgid, 0), p.id), p.id

基本思想是orgid如果存在就按顺序排序。如果没有,请替换id它。然后排序看起来是id在每个组内。


推荐阅读