我可以在JOIN条件中使用CASE语句吗?
下面的图片是Microsoft SQL Server 2008 R2系统视图的一部分。从图片中我们可以看到,sys.partitions
和sys.allocation_units
之间的关系取决于sys.allocation_units.type
的值。所以要把它们连接在一起,我会写一些类似这样的东西。
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON CASE
WHEN a.type IN (1, 3)
THEN a.container_id = p.hobt_id
WHEN a.type IN (2)
THEN a.container_id = p.partition_id
END
但上面的代码给出了一个语法错误。我猜这是因为有CASE
语句。
谁能帮助解释一下?
添加错误信息。
Msg 102, Level 15, State 1, Line 6 在'='附近语法不正确。
118
3
一个
CASE
表达式从子句的THEN
部分返回一个值。 你可以这样使用它。注意,你需要对返回的值做一些处理,例如与1进行比较。你的语句试图返回赋值或测试相等,这在
CASE
/THEN
子句中都是没有意义的。 (如果 "BOOLEAN "是一个数据类型,那么平等测试就有意义了)。我建议你通过这个链接SQL Server中的条件连接和https://stackoverflow.com/questions/8361183/t-sql-case-statement-in-a-join-on-clause。
比如说
编辑:根据评论。
试试这个。