我想提取一条SQL语句,以便根据表源有条件地填充一列(第二个表中没有)。
Table1
joinid
flag1
cond1
cond2
date
Table2
joinid
flag2
cond2
date
我希望输出为:
flag1,flag2,cond1,cond2
其中cond1对于table2的结果总是600。
条件是日期必须在特定范围内。
Psuedo Ex:
SELECT flag1,flag2,IF tablesource=table1 then cond1 else 600 AS cond1,cond2
FROM table1
WHERE date IN (date1,date2,date3, etc)
LEFT JOIN table2 on table1.joinid=table2.joinid
答案 0 :(得分:1)
如果我正确地阅读了您的问题,您正在寻找不同行中两个表的结果。这是通过union
代替left join
:
select flag1
, flag2
, cond1
, cond2
from (
select flag1
, null as flag2
, cond1
, cond2
, date
from Table1
union all
select null
, flag2
, 600
, cond2
, date
from Table2
) SubQueryAlias
where '2010-01-01' <= date and date < '2011-01-01'
答案 1 :(得分:1)
是否需要将两个cond2字段放入一个目标字段?
需要将哪个日期字段用于过滤器?
假设没有和table1 ......
选择
t1.joinid,
t1.flag1,
t2.flag2,
如果t1.cond1不为null,则cond1 else 600结束AS cond1
t1.cond2为t1cond2,
t2.cond2为t2cond2
FROM table1 t1
在t1.joinid = t2.joinid的LEFT JOIN table2 t2
在哪里t1.date IN(date1,date2,date3等)