SQL Server 如何使CASE函数返回多列?

xfb7svmp  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(217)

我们有办法从T-SQL中的CASE函数返回多个列吗?我尝试的查询:

SELECT 

CASE
    WHEN Street IS NOT NULL AND City IS NOT NULL
    THEN Name, Surname, Street, City, ZipCode
    ELSE BackUpAddr
END

FROM Table

但是不出所料,在“那么”之后,我只被允许进入一列。有什么解决问题的想法吗?

zy1mlcev

zy1mlcev1#

对于要返回的每列,可以使用多个CASE语句:

SELECT
   Name,
   Surname,
   CASE WHEN Street IS NOT NULL THEN Street ELSE BackUpAddr END AS 
   Street,
   CASE WHEN City IS NOT NULL THEN City ELSE BackUpAddr END AS City,
   ZipCode
FROM Table
eaf3rand

eaf3rand2#

这里的第一个问题是case表达式中的每个选项产生不同数量的结果。因为这是每行的,所以您要求的结果可能具有不同数量的列。这是不允许的。结果集中的每一行必须具有相同数量(和类型)的列。

  • 您将无法找到解决方法。* 无论您使用CASE还是其他方法,结果中的列必须一致。没有例外。在选择BackUpAddr列的情况下,您可能需要为列提供一堆额外的null值,或者在选择其他列的情况下,需要将所有内容连接成一个长字符串。

第二个问题是误解了case表达式实际上就是表达式。这是一个常见的错误。这意味着**case表达式不像过程代码中的if块。**相反,case表达式的结果必须始终是单个(标量)值。

相关问题