2013-05-13 22 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等)