在sqlserver中使用join时的case语句

时间:2016-05-06 10:14:21

标签: sql sql-server sql-server-2008

我们可以在连接处使用case语句

我需要根据

这样的条件加入
if month(fr_yr) <= month(to_yr)
then
join on start date between month(fr_yr) and month(to_yr)
else
join on start date between month(to_yr) and month(fr_yr)
选择数据时

谢谢,

4 个答案:

答案 0 :(得分:1)

SQL的连接语法非常通用,可以用来模拟关系操作(经典的getline来执行cin.eof())。我想它可以达到你认为你总是需要加入的程度。但是值得记住类似于逻辑OUTER JOIN的关系运算符,例如UNION

OR

答案 1 :(得分:0)

您可以使用任何有效的逻辑语句作为连接条件,并且可以将case表达式用作此类语句的一部分。

所以你可以这样做:

create table #t1 (i int)
create table #t2 (i int, j int)

insert #t1 values (1), (2)
insert #t2 values (1, 2), (2, 3), (4, 1), (5, 2)

select *
from #t1
join #t2 on #t1.i between case when #t2.i<=#t2.j then #t2.i else #t2.j end and case when #t2.i<=#t2.j then #t2.j else #t2.i end 

当然,这将如何影响表演另一个故事。就个人而言,我宁愿UNION ALL两个查询。

答案 2 :(得分:0)

这是一个非常奇怪的要求。

这是你需要的join子句(不需要工会,临时表或任何过于复杂的东西)

ON StartDate BETWEEN MONTH(fr_yr) AND MONTH(to_yr)
OR StartDate BETWEEN MONTH(to_yr) AND MONTH(fr_yr)

答案 3 :(得分:-1)

不,你不能那样做。 您不能使用if条件来更改select语句中的连接 您可以使用以下连接子句

join on startdate between month(fr_yr) and month(to_yr) 
OR
startdate between month(to_yr) and month(fr_yr)