sql - 具有分区依据的 SQL 案例并选择具有特定值的行
问题描述
我有一个场景,我必须使用 case 条件,如果值匹配,那么我需要从表中获取值,否则我需要将其硬编码为 1 和 0 。
表License
:
Number permit reviewpermit State
---------------------------------------
101 0 1 TX
101 1 0 OK
101 1 1 NC
102 1 1 LA
102 0 1 OK
健康)状况 :
- 如果“数字”组的任何状态为“TX”,则从该“数字”组的所有其他状态的 TX 状态中选择“许可”、“审查许可”值。
- 如果它是“数字”组的其他状态,则为该“数字”组的所有状态选择“1”作为“许可”,选择“0”作为“审查许可”。
期望的输出:
Number permit reviewpermit State
--------------------------------------
101 0 1 TX
101 0 1 OK
101 0 1 NC
102 1 0 LA
102 1 0 OK
根据德克萨斯州,101 组具有所有 permit 和 reviewpermit 值。102 组具有所有 permit 和 reviewpermit 值,分别为“1”和“0”。
这是我到目前为止写的代码:
SELECT
Number,
MAX(CASE WHEN State = 'TX' THEN Permit ELSE 1 END) OVER (PARTITION BY [Number]) AS permit,
MAX(CASE WHEN State = 'TX' THEN ReviewPermit ELSE 0 END) OVER (PARTITION BY [Number]) AS reviewpermit,
state
FROM
License
但它不会返回所需的输出。
解决方案
我认为这个逻辑可以满足您的要求:
select Number,
coalesce(MAX(CASE WHEN State = 'TX' THEN Permit END) OVER (PARTITION BY [Number]),
1) as permit,
coalesce(MAX(CASE WHEN State = 'TX' THEN ReviewPermit END) OVER (PARTITION BY [Number]),
0) AS reviewpermit, state
from License;
这将检查MAX()
. 如果不存在,则值为NULL
,因此将COALESCE()
采用默认值。
推荐阅读
- java - mongoDB 和 mongoTemplate 中的聚合查询
- python - 在python中合并拆分字符串
- regex - 编辑yaml文件的正则表达式
- r - 从 url 读取 bmp 图像 - R
- python - BeautifulSoup 从 Python 中的 P 类图片标签中获取图像名称
- angular - *ngFor 与过滤管道和切片不起作用
- java - 如何将生成的数据存储在数据库中?
- python - 如何使用 SQLAlchemy 插入复合主键?
- java - Api Java ElasticSearch | 通过传递列表并返回所有匹配项进行搜索
- encryption - 确保已部署软件的公钥安全