sql - 如何根据条件获得不同的行
问题描述
我有这样的数据表
身份证 | 描述 | 地位 ------+------+------------ 1 | 美国广播公司 | 完全的 1 | 美国广播公司 | 完全的 1 | 定义 | 计划 1 | 定义 | 计划 1 | 吉 | 改期 1 | 吉 | 改期 2 | 美国广播公司 | 完全的 2 | 定义 | 计划 2 | 吉 | 计划
我需要根据状态为每个 ID 获取一行。一行代表Planned
另一个,如果一个 ID 同时具有状态Completed
& Rescheduled
,则Rescheduled
必须选择行,否则Completed
例如
ID 1 具有Planned
, Completed
&Rescheduled
状态。输出应如下所示
ID = 1 的一行Planned
和 ID = 1 的一行“重新安排”
身份证 | 描述 | 地位 ------+------+------------ 1 | 吉 | 改期 1 | 定义 | 计划 2 | 美国广播公司 | 完全的 2 | 定义 | 计划
解决方案
您可以这样做,然后返回(作为您的预期输出)和的每个组合NOT EXISTS
的最小值:desc
id
status
select t.id, min(t.[desc]) [desc], t.status
from tablename t
where status in ('Planned', 'Rescheduled')
or not exists (
select 1 from tablename
where id = t.id and status = 'Rescheduled'
)
group by t.id, t.status
order by t.id, t.status
请参阅演示。
结果:
> id | desc | status
> -: | :--- | :----------
> 1 | def | Planned
> 1 | ghi | Rescheduled
> 2 | abc | Completed
> 2 | def | Planned
推荐阅读
- numpy - 获得密集和稀疏数组的统一行为的最佳方法?
- javascript - 如何修复 TypeError:无法读取未定义 REACT 的属性“地图”
- python - 如果输入的数字介于两个不同的数字之间,我该如何打印?
- laravel - Laravel Dynamic Dropdown 从单表 laravel 的列中获取数据
- wordpress - WooCommerce 多供应商的拆分购物车
- python - 在非序列图中将数据馈送到 keras 瓶颈
- php - Chargebee api 实施与计划和订阅
- reactjs - 如何在 React 中显示来自天气 api 的数据?
- php - 如何阻止页面连续加载
- python - 如何将 one2many 下拉数据中的值绑定到 odoo 12 中的列字段?