1

有没有办法加入案例?

就像是

select * from abba 
   case when a=b then 
      join acdc on abba.id=acdc.id
   when b=c then 
      join bebop on abba.id=bebop.id 
   end

有没有办法做到这一点?

最好的问候乔

4

2 回答 2

6

执行此操作的常用方法是 LEFT JOIN 两个表并根据 CASE 条件选择值:

SELECT *, CASE WHEN a=b THEN acdc.myField ELSE bebop.myField END AS myField
  FROM abba 
       LEFT JOIN acdc ON abba.id=acdc.id 
       LEFT JOIN bebop ON abba.id=bebop.id
于 2013-12-11T08:58:37.940 回答
0

如果查询是非动态的,则 no sincecase语句仅返回文字值,例如stringint或其他数据类型。

但是有一种变通方法 -动态 sql。您将整个语句视为一个字符串。然后你可以在字符串中处理你的案例。

例如:

declare @query varchar(1000)
set @query = 'select * from abba '+
                case when @a=@b then 'join acdc on abba.id=acdc.id'
                     when @b=@c then 'join bebop on abba.id=bebop.id'
                end
exec(@query)

但是当然,你的 a=b & b=c 必须是一些 sql 变量。

于 2013-12-11T09:03:48.563 回答