sql - 如何分组并获得特定的输出
问题描述
我有一个如下查询
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 但由于其他选择参数,但我无法获得此输出。
请给我建议。
解决方案
您可以在 中使用逻辑order by
:
order by coalesce(nullif(p.orgid, 0), p.id), p.id
基本思想是orgid
如果存在就按顺序排序。如果没有,请替换id
它。然后排序看起来是id
在每个组内。
推荐阅读
- c++ - 在 C++ 中将 int 值分配给枚举,反之亦然
- java - 试图让 Eclipse 识别 jdk1.8,但我找不到该文件夹
- curl - 如何创建与 Curl 问题等效的 ColdFusion
- r - 在 R 中使用 doSNOW 和 foreach 时,您可以隐藏“类型:EXEC”和“类型:完成”输出吗?
- ruby - Chef powershell_out SystemCallError 文件名或扩展名太长。- CreateProcessAsUserW 失败
- python - 如何使用 Jupyter Notebook 读取本地 conf 文件?
- angular - 将焦点放在 Angular 上动态创建的输入上
- google-pay - google pay 的退款系统如何运作?
- c# - C# ASP.NET:“对象引用未设置为对象的实例。” System.Xml.Linq.XElement.Attribute(...) 返回 null
- java - 如何在字符串的每 3 个字符之后将给定的字符添加到字符串?