如何从SQL Server中的CASE语句中选择第一个匹配行

如何从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

从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 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