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

时间:2015-06-22 05:06:52

标签: sql sql-server tsql

当我针对SQL Server数据库运行以下SQL时:

SELECT 
    t1.id, t1.name, t2.status
FROM 
    t1 
JOIN 
    t2 ON t1.id = t2.id
WHERE 
    t1.id = t2.id

我得到以下结果

id   name   status
------------------- 
1    bob    active
1    bob    draft
2    jim    active
3    ted    draft

我试图找出如何构造WHERE语句以获得以下所需结果。

id   name   status 
-------------------
1    bob    active
2    jim    active
3    ted    draft

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

1 个答案:

答案 0 :(得分: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