2013-11-15 132 views
0

我有兩個表如下:SQL結合表

表1:

f1  f2 
1  2 
3  4 
5  6 
7  8 

表2:

f1  f3 f4 
1  R 20 
1  m 10 
1  m 30 
3  m 5 
5  R 20 

所以現在我需要像表:

f1  f2  SUM(f4 where f3=m) 
1  2   40 
3  4   5 
5  6   null 
7  8   null 

換句話說,如果f1存在於table2中,並且f3 ='m',那麼g等它的總和,否則只是從表1中選擇所有的數據。

我嘗試以下代碼:

SELECT T1.* , T2.SUM(f4) 
FROM Table1 AS T1 
LEFT OUTER JOIN Table2 AS T2 ON T1.f1 = T2.f1 
WHERE T2.f3='m' 

此僅示出了一個存在於表2和,如果我做:

SELECT T1.* , T2.SUM(f4) 
FROM Table1 AS T1 
LEFT OUTER JOIN Table2 AS T2 ON T1.f1 = T2.f1 AND T2.f3='m' 

顯示20 F3,5和60爲1.

回答

0

你需要一個GROUP BY

SELECT T1.f1 , 
     T1.f2 , 
     T2.SUM(f4) 
FROM Table1 AS T1 
     LEFT OUTER JOIN Table2 AS T2 
     ON T1.f1 = T2.f1 
     AND T2.f3 = 'm' 
GROUP BY T1.f1 , 
     T1.f2 
+0

您確定您的group by子句的語法嗎? –

+0

不,我的不好。好決定。 – Walt

0
select T1.F1, T1.F2, sum(T2.f4) 
from Table1 T1 
left outer join Table2 as T2 
on (T1.F1 = T2.F1 and T2.F3 = 'm') 
group by T1.F1 , T1.F2 
0
SELECT  dbo.tab1.f1, dbo.tab1.f2, CASE WHEN f3 = 'm' THEN SUM(f4) ELSE NULL END AS Expr1 
FROM  dbo.tab1 LEFT OUTER JOIN   
      dbo.tab2 ON dbo.tab1.f1 = dbo.tab2.f1 AND dbo.tab2.f3 = 'm' 
GROUP BY dbo.tab1.f1, dbo.tab1.f2, dbo.tab2.f3