Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите с выборкой join и and  [new]
ildar_t
Member

Откуда:
Сообщений: 2
Имеется 2 таблицы Dohod и Kadry:
Таблица Dohod
Tabn Mes Dohod
1 январь 10
2 январь 20
1 февраль 10
2 февраль 20
3 февраль 15
4 февраль 15
3 март 15
4 март 15

Таблица Kadry
Fam Tabn
Иванов 1
Петров 2
Сидоров 3
Васильев 4
Михайлов 5

Из этих таблиц нужно получить объединенную таблицу Svod:
Tabn Fam январь февраль март
1 Иванов 10 10 0
2 Петров 20 20 0
3 Сидоров 0 15 15
4 Васильев 0 15 15


Написал запрос
select tabn = k.tabn,
       fam  = k.fam,
       jan = sum(d1.dohod),
       feb = sum(d2.dohod),
       mar = sum(d3.dohod),
       itog = sum(d1.dohod) + sum(d2.dohod) + sum(d3.dohod)
  from   Kadry k
       left outer join Dohod d1 (NOLOCK) on d1.tabn = K.tabn
       left outer join Dohod d2 (NOLOCK) on d2.tabn = K.tabn
       left outer join Dohod d3 (NOLOCK) on d3.tabn = K.tabn
where 
      d1.mes = 'январь' 
      and d2.mes = 'февраль'
      and d3.mes = 'март'
group by k.tabn, k.fam


Но в результате нет работников которые не работали в январе.
Таблица Свод
Tabn Fam январь февраль март
1 Иванов 10 10 0
2 Петров 20 20 0

Помогите, пожалуйста, переписать запрос, так чтобы выходили все работники у которых есть доход.
30 апр 14, 09:04    [15956038]     Ответить | Цитировать Сообщить модератору
 Re: помогите с выборкой join и and  [new]
Добрый Э - Эх
Guest
читать про PIVOT либо его заменители на CASE + GROUP BY
30 апр 14, 09:08    [15956063]     Ответить | Цитировать Сообщить модератору
 Re: помогите с выборкой join и and  [new]
Добрый Э - Эх
Guest
ildar_t
select tabn = k.tabn,
       fam  = k.fam,
       jan = sum(d1.dohod),
       feb = sum(d2.dohod),
       mar = sum(d3.dohod),
       itog = sum(d1.dohod) + sum(d2.dohod) + sum(d3.dohod)
  from   Kadry k
       left outer join Dohod d1 (NOLOCK) on d1.tabn = K.tabn
       left outer join Dohod d2 (NOLOCK) on d2.tabn = K.tabn
       left outer join Dohod d3 (NOLOCK) on d3.tabn = K.tabn
where 
      d1.mes = 'январь' 
      and d2.mes = 'февраль'
      and d3.mes = 'март'
group by k.tabn, k.fam

в твоем случае WHERE вырождает LEFT OUTER JOIN в банальный INNER JOIN
30 апр 14, 09:11    [15956077]     Ответить | Цитировать Сообщить модератору
 Re: помогите с выборкой join и and  [new]
prog882
Guest
ildar_t,
select tabn, fam, [Январь], [Февраль], [Март]
from (select d.tabn, k.fam, d.mes, d.dohod from dohod d join kadry k on d.tabn = k.tabn) as t
pivot (sum(t.dohod) for t.mes in ([Январь],[Февраль],[Март])) as p
30 апр 14, 09:55    [15956352]     Ответить | Цитировать Сообщить модератору
 Re: помогите с выборкой join и and  [new]
ildar_t
Member

Откуда:
Сообщений: 2
prog882, спасибо, все получилось
30 апр 14, 13:33    [15958209]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить