Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于同一列中的条件的sql列_Sql_Sql Server - Fatal编程技术网

基于同一列中的条件的sql列

基于同一列中的条件的sql列,sql,sql-server,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不可用,那么其状态id为2的id,如下面的结果。如果我们有两个状态,那么只有1个应该出现 id

下面是表格

id      projectid       statusid
100     2971            1
101     4637            1
102     4637            2
103     6144            2
104     6510            1
基本上我想要所有的id,projectid,其状态为1,如果1不可用,那么其状态id为2的id,如下面的结果。如果我们有两个状态,那么只有1个应该出现

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

我尝试使用union,但我使用了3个临时表来实现它,以寻找更好的选项。

这里有一个技巧,使用
行数和
带领带的Top 1

select top 1 with ties * 
from yourtable 
order by row_number()over(partition by projectid order by statusid asc)
使用行号

;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