从SQL Server中的一个简单表中,有两列,如下所示
Key Value
------------
A 5000
B NULL
C 6000
我希望以B,A,C
的顺序获取第一条记录(即获取B的值,如果为null,则为A的值,如果为null,则为C的值),其中Value
不为空。从上面的列表中我希望输出为5000
我尝试使用此代码 - 没有任何运气:
SELECT
CASE
WHEN [Key] = 'B' AND Value IS NOT NULL
THEN Value
WHEN [Key] = 'A' AND Value IS NOT NULL
THEN Value
WHEN [Key] = 'C' AND Value IS NOT NULL
THEN Value
END
FROM
temporary
答案 0 :(得分:2)
coalesce()
:
select coalesce(max(case when [Key] = 'B' then value end),
max(case when [Key] = 'A' then value end),
max(case when [Key] = 'C' then value end)
)
from temporary;
但是,我想我会这样做:
select top 1 t.value
from temporary t
where value is not null and [Key] in ('A', 'B', 'C')
order by charindex([Key], 'B,A,C');
请注意,order by
只是获取首选排序的简写。它适用于" A"," B"和" C",但可能不适用于所有字符串。
答案 1 :(得分:2)
您可以使用where
子句忽略null
value
,按自定义排序(使用case
表达式)排序,然后选择{{1}行:
top 1