如何从SQL Server中的CASE语句中选择第一个匹配行
从SQL Server中包含两列的简单表中,如下所示如何从SQL Server中的CASE语句中选择第一个匹配行,sql,sql-server,select,Sql,Sql Server,Select,从SQL Server中包含两列的简单表中,如下所示 Key Value ------------ A 5000 B NULL C 6000 我想按B,A,C的顺序获取第一条记录(即获取B的值,如果为null,则获取A的值,如果为null,则获取C的值),其中value不为null。从上面的列表中,我希望输出为5000 我正在尝试使用此代码-没有任何运气: SELECT CASE WHEN [Key] = 'B' AND Value IS NO
Key Value
------------
A 5000
B NULL
C 6000
我想按B,A,C
的顺序获取第一条记录(即获取B的值,如果为null,则获取A的值,如果为null,则获取C的值),其中value
不为null。从上面的列表中,我希望输出为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
嗯。一种方法使用
coalesce()
:
但是,我想我会:
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');
请注意,
orderby
只是获取首选订单的简写。它适用于“A”、“B”和“C”,但可能不能推广到所有字符串。Hmmmm。一种方法使用coalesce()
:
但是,我想我会:
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');
请注意,
orderby
只是获取首选订单的简写。它适用于“A”、“B”和“C”,但可能不能推广到所有字符串。您可以使用where
子句省略null
值
s,按自定义排序(使用大小写
表达式)排序,只需取前1行即可:
SELECT TOP 1 value
FROM mytable
WHERE value IS NOT NULL
ORDER BY CASE key WHEN 'B' THEN 0
WHEN 'A' THEN 1
WHEN 'C' THEN 2
ELSE 3
END ASC
您可以使用where
子句省略null
值
s,按自定义排序(使用大小写
表达式)排序,只需取前1行即可:
SELECT TOP 1 value
FROM mytable
WHERE value IS NOT NULL
ORDER BY CASE key WHEN 'B' THEN 0
WHEN 'A' THEN 1
WHEN 'C' THEN 2
ELSE 3
END ASC