2013-05-13 52 views
0

我想拉一个SQL语句,以便一个列(不存在于第二个表中)根据表来源有条件填充。从列加入条件列表源

Table1 
joinid 
flag1 
cond1 
cond2 
date 

Table2 
joinid 
flag2 
cond2 
date 

我想输出是:

flag1,flag2,cond1,cond2 

,让COND1总是600从表2的结果。

有一个条件,日期必须在特定的范围内。

的伪例:

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 

回答

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' 
+0

那么它必须是一个工会呢?没有办法做到这一点与加入? – steventnorris 2013-05-13 14:08:12

+0

连接用于返回来自多个表中的列的行。你会得到一个结果集,如'table1col1,table1col2,...,table2col1,table2col2,...' – Andomar 2013-05-13 14:10:20

+0

对。我没有想到这一点。那么工会最适合我。谢谢您的帮助! – steventnorris 2013-05-13 14:14:40

1

做两个COND2字段需要被放入一个目标字段?
哪个日期字段需要用于过滤器?

假设没有和表1 ...

选择
t1.joinid,
t1.flag1,
t2.flag2,
情况下t1.cond1不为空,那么其他COND1 600结束AS COND1
t1.cond2如t1cond2,
t2.cond2作为t2cond2
FROM表1 T1
LEFT JOIN table2的T2上t1.joinid = t2.joinid
WHERE t1.date IN(date1,date2,date3等)