【发布时间】:2019-04-17 11:54:22
【问题描述】:
所以我有一个看起来像这样的查询 -
select
case when @subType = 1 or @subType = 2 then id end as Id,
case when @subType = 3 then name end as name
case when @subType = 3 or @subType = 2 then address end as address
from
table
所以我遇到的问题是,如果@subType 为 3,那么名为 ID 的列将全部为空。然后我不想返回整个专栏。与此相反,如果 @subType 为 2,则 name 将全部为 null,所以我不想要整个列。
【问题讨论】:
-
SELECT语句的结果集必须具有恒定的形状,在编译时确定。如果要返回不同的列,取决于@subType,你必须使用多个语句并使用IF..ELSE在它们之间进行选择。但是,这可能会使处理结果变得更加困难,因为现在您的客户将无法指望所有存在的列。 -
你为什么想要这样的查询?它将在每种情况下返回不同的数据类型,这意味着 客户端 必须将它们全部视为文本、对象、动态或弱类型值,具体取决于语言
-
顺便说一句,此查询不会返回 NULL。如果
subtype为 3,您将获得nameonly。Address和ID都不会返回。 -
@PanagiotisKanavos 当子类型为 3 时,它会为 id 返回 null。
-
[address]将返回@subtype的值是3,@PanagiotisKanavos,CASE表达式是case when @subType = 3 or @subType = 2 then address end as address
标签: sql sql-server case sql-null