2013-11-15 7 views
0

у меня есть две таблицы следующим образом:SQL объединить таблицы

Table1:

f1  f2 
1  2 
3  4 
5  6 
7  8 

TABLE2:

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 существует в таблице 2 и f3 = 'm', то g et, в противном случае просто выберите все данные из таблицы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' 

Это показывает только одно существуют в Table2 и если я делаю:

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

Вы уверены, что в синтаксисе вашей группы по предложению? –

+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 
Смежные вопросы