有没有办法与案件联系

时间:2013-12-11 08:53:32

标签: sql-server function sql-server-2000 table-functions

有没有办法与案件进行联接?

这样的东西
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

有办法做到这一点吗?

祝你好运 乔

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果查询是非动态的,那么case语句只会返回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变量。