Ima*_*yne 1 sql t-sql sql-server
当我对SQL Server数据库运行以下SQL时:
SELECT
t1.id, t1.name, t2.status
FROM
t1
JOIN
t2 ON t1.id = t2.id
WHERE
t1.id = t2.id
Run Code Online (Sandbox Code Playgroud)
我得到以下结果
id name status
-------------------
1 bob active
1 bob draft
2 jim active
3 ted draft
Run Code Online (Sandbox Code Playgroud)
我正在试图弄清楚如何构造WHERE语句以获得以下所需结果.
id name status
-------------------
1 bob active
2 jim active
3 ted draft
Run Code Online (Sandbox Code Playgroud)
基本上我正在尝试解决的问题是当存在多个状态时删除重复行并删除行以支持状态活动,我真的试图避免嵌套查询或交叉(如果可能).
使用ROW_NUMBER()具有CASE这样的
;WITH CTE AS
(
SELECT t1.id, t1.name, t2.status,ROW_NUMBER()OVER(PARTITION BY t1.id ORDER BY CASE WHEN t2.status = 'active' THEN 1 ELSE 2 END ASC) rn
FROM t1 JOIN t2 ON t1.id = t2.id
)
SELECT * FROM CTE WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |