SQL Server-根据另一列值选择DISTINCT
我得到了这样一个表,输入参数RevParam上有: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
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相同的结果。非常感谢你的帮助,让我开心!