TSQL根据列的首选值返回不同的行

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)

基本上我正在尝试解决的问题是当存在多个状态时删除重复行并删除行以支持状态活动,我真的试图避免嵌套查询或交叉(如果可能).

ugh*_*hai 6

使用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)