Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 Server-根据另一列值选择DISTINCT_Sql_Sql Server_Distinct - Fatal编程技术网

SQL Server-根据另一列值选择DISTINCT

SQL Server-根据另一列值选择DISTINCT,sql,sql-server,distinct,Sql,Sql Server,Distinct,我得到了这样一个表,输入参数RevParam上有: Key Rev IsCurrent ===================== abc 0 TRUE def 0 TRUE ghj 2 FALSE ghj 0 TRUE klm 0 TRUE def 1 FALSE abc 1 FALSE abc 2 FALSE 我希望键是唯一的值。如果设置了RevParam,则应查看具有该Rev值的所有行,缺少的键应具有:修订版0。像这样: Result if RevPara

我得到了这样一个表,输入参数RevParam上有:

Key Rev IsCurrent
=====================
abc 0   TRUE
def 0   TRUE
ghj 2   FALSE
ghj 0   TRUE
klm 0   TRUE
def 1   FALSE
abc 1   FALSE
abc 2   FALSE
我希望
是唯一的值。如果设置了
RevParam
,则应查看具有该Rev值的所有行,缺少的
键应具有:修订版0。像这样:

Result if RevParam = 1      

abc 1   FALSE
def 1   FALSE
ghj 0   TRUE
klm 0   TRUE

Result if revisionParameter = 0     

abc 0   TRUE
def 0   TRUE
ghj 0   TRUE
klm 0   TRUE
这让我烦了一整天,请帮帮我

有记录的

WITH records
AS
(
    SELECT  [key], [rev], [IsCurrent],
            ROW_NUMBER() OVER(PARTITION BY [key]
            ORDER BY CASE WHEN [rev] = 1          -- <<== change REV value here
            THEN 0 ELSE 1 END) rn
    FROM    tableName
    WHERE   [Rev] IN (1,0)
)
SELECT  [key], [rev], [IsCurrent]
FROM    records 
WHERE   rn = 1
作为 ( 选择[键]、[修订]、[当前], (按[键]分区)上的行数() 当[rev]=1--
有记录时按案例排序
作为
(
选择[键]、[修订]、[当前],
(按[键]分区)上的行数()

当[rev]=1时按案例排序--如果RevParam=1则结果

abc 1错误 def 1错误 ghj 0正确 荷航0真


它有rev值0和1。如果RevParam=1,请明确指定结果

abc 1错误 def 1错误 ghj 0正确 荷航0真


它的rev值为0和1。请明确指定

请更详细地说明概念。请更详细地说明概念。+1我认为CTE中可能还应该有一个
where
子句,类似于
where rev in(0,1)
-由于OP不想返回除0或所选值以外的
rev
值。@MarkBannister我同意,但OP没有提到要显示的记录,如果它与
rev
不匹配。例如,我找到的
rev
2
,没有
def
的记录,我不知道是什么原因OP想显示。谢谢你的回答。@Mark Bannister是正确的,我只想返回0或revParam值的Rev值。但是只能显示一种类型的键。如果没有匹配,它应该返回与参数为0相同的结果。非常感谢你的帮助,让我开心!+1我想可能还有一个
 CTE中的where
子句-类似于
where rev in(0,1)
-由于OP不想返回除0或所选值以外的
rev
值。@MarkBannister我同意,但OP没有提到要显示的记录,如果它与
rev
不匹配。例如,我找到的
rev
2
,没有
def
的记录,我不知道是什么原因OP想显示。谢谢你的回答。@Mark Bannister是正确的,我只想返回0或revParam值的Rev值。但是只能显示一种类型的键。如果没有匹配项,它应该返回与参数为0相同的结果。非常感谢你的帮助,让我开心!