sql列基于同一列中的条件

时间:2018-01-13 10:17:32

标签: sql sql-server

下面是表格

id      projectid       statusid
100     2971            1
101     4637            1
102     4637            2
103     6144            2
104     6510            1

基本上我想要所有的id,projectid,其状态为1,如果1不可用,则其statusid为2,如下面的结果。如果我们同时拥有这两个状态,那么只有1个应该来

id      projectid       statusid
100     2971            1
101     4637            1
103     6144            2
104     6510            1

我尝试了联盟,但我拿了3个临时表来实现它寻找更好的选择。

2 个答案:

答案 0 :(得分:1)

以下是使用Row_NumberTop 1 with ties

的一个技巧
select top 1 with ties * 
from yourtable 
order by row_number()over(partition by projectid order by statusid asc)

答案 1 :(得分:0)

使用Row_Number

;WITH CTE
AS
(
    SELECT
        RN = ROW_NUMBER() OVER(PARTITION BY [Id] ORDER BY statusid ASC),
        Id,
        ProjectId,
        statusid
        FROM YourTable
)
SELECT
    Id,
        ProjectId,
        statusid
        FROM CTE    
            WHERE RN = 1