假设我有三个这样的表:
TABLE_X TABLE_Y TABLE_Z
---------------------------------------
2012/1/1 a b
2012/1/2 a b
... a b
2012/3/17 a b
2012/3/18 a b
2012/3/19 a b
... a b
2012/12/22 a b
2012/12/23 a b
2012/12/24 a b
... a b
2013/1/1 a b
我需要使用GETDATE()作为条件。 GETDATE()过去和过去的所有值都将采用TABLE_Y
cols。 GETDATE()未来的所有值都将采用TABLE_Z
cols。
view_TABLE_X_JOIN_Y_Z
---------------------
2012/1/1 a
2012/1/2 a
... a
2012/3/17 a
2012/3/18 a
2012/3/19 a
... a
2012/12/22 a
GETDATE() a
2012/12/24 b
... b
2013/1/1 b
2013/1/2 b
我尝试过:
SELECT x.Date
,CASE WHEN GETDATE() > x.Date THEN z.Value
ELSE y.Value
END AS Value
FROM TABLE_X x
LEFT JOIN TABLE_Y y ON x.Date = y.Date
LEFT JOIN TABLE_Z z ON x.Date = z.Date
问题是日期不是完美的FK参考。即TABLE_X中的日期已完成,但在Y和Z的某些地方缺少这些日期。
答案 0 :(得分:2)
您可以使用以下内容:
SELECT
CASE WHEN table_x.date_column > GETDATE() THEN table_y.some_column
ELSE table_z.some_column END
FROM table_x JOIN table_y JOIN table_z (insert appropriate join clauses)
答案 1 :(得分:0)
我不确定是否正确理解你的问题,但我认为这样做会:
SELECT x.date, y.*
FROM x INNER JOIN y ON x.date = y.date
WHERE x.date <= GETDATE()
UNION
SELECT x.date, z.*
FROM x INNER JOIN z ON x.date = z.date
WHERE x.date > GETDATE()
我假设x,y和z是不同的表,y和z中的日期是引用x的外键,y和z应该具有相同的列结构
答案 2 :(得分:0)
我不确定,试试这个,
create view view_TABLE_X_JOIN_Y_Z as(select y.* from table_y y
where getdate() > (select date from TABLE_X x where y.date=x.date)
union all
select z.* from table_z z where getdate() <= (select date from TABLE_x x
where z.date=x.date))
如果两个表都应具有相同的列结构