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

Откуда:
Сообщений: 7
Имеем 3 однотипных таблицы, в них есть поля "id, id2, count" есть 4-я таблица содержащая id2
По сути 3 таблицы с 3-х складов и таблица филиалов (id2). На каждом складе товар (id) Может быть разных партий и разных филиалов.
Типа такого:
таблица 1-3
id | id2 |...| count ......
--------------------------
01 | Москва|...| 1
01 | Москва|...| 3
01 | Москва|...| 6
таблица 4
| id2 |...|
--------------------------
| Москва|...|
| Питер |...|
| Ростов |...|

Задача собрать 5-ю таблицу, в которой при запросе по id (код товара) будет строк как и в 4-й (филиалов), и 3 атрибута суммы на складах.
т.е. "id2, sum(tb1.count), sum(tb2.count), sum(tb3.count)

типа такого:

Филиал | skl1 | skl2 | skl3
--------------------------
Москва | 10 | 3 | 7
Питер | 7 | 5 | 22

Программно это можно было сделать пройдясь циклом по таблице 4, и выбрать суммы из 3-х таблиц по id и id2
Но задача сделать это средствами только SQL запроса на входе только id....

2 дня не могу состыковать эти тиблицы (
2 сен 12, 13:14    [13101079]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
aleks2
Guest
select id2, id_storage, id, SUM([count]) as [count]
from
(
  select id2, 1 as id_storage, id, SUM([count]) as [count]
  from [Первая однотипная таблица] group by id2, id
  union all
  select id2, 3 as id_storage, id, SUM([count]) as [count]
  from [Вторая однотипная таблица] group by id2, id
  union all
  select id2, 3 as id_storage, id, SUM([count]) as [count]
  from [Третья однотипная таблица] group by id2, id

) X
group by id2, id_storage, id

-- ну... PIVOT сами разучите.
2 сен 12, 14:08    [13101173]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
Xandir
Member

Откуда:
Сообщений: 7
Благодарю.
В PIVOT вообще ноль. Я так понял, надо в конце дописать pivot и там цикл по таблице 4 (филиалов), но совсем не въезжаю как его собрать, постоянно ругается на необъявленный идентификатор или Group by
И что за Х в конце? что там должно быть?
2 сен 12, 16:24    [13101479]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
Xandir
Member

Откуда:
Сообщений: 7
Да, и обнаружил -название полей в трех этих таблицах немного отличаются, где по русски, где нет. Но смысл в них тот же )
2 сен 12, 16:27    [13101488]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
Xandir
Member

Откуда:
Сообщений: 7
этот запрос выдает сумму по всем 3-м, а надо что бы в итоговой таблице было так: 1-й столбец id2, второй sum(tab1.count), третий sum(tab2.count), четвертый sum(tab3.count)

а сейчас имеем sum(sum(tab1.count)+sum(tab2.count)+sum(tab3.count))
2 сен 12, 16:36    [13101505]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
aleks2
Guest
Xandir
этот запрос выдает сумму по всем 3-м, а надо что бы в итоговой таблице было так: 1-й столбец id2, второй sum(tab1.count), третий sum(tab2.count), четвертый sum(tab3.count)

а сейчас имеем sum(sum(tab1.count)+sum(tab2.count)+sum(tab3.count))


Ну чо уж брехать то?

select id2, id_storage, id, SUM([count]) as [count]
from
(
  select id2, 'первый' as id_storage, id, SUM([count]) as [count]
  from [Первая однотипная таблица] group by id2, id
  union all
  select id2, 'второй' as id_storage, id, SUM([count]) as [count]
  from [Вторая однотипная таблица] group by id2, id
  union all
  select id2, 'третий' as id_storage, id, SUM([count]) as [count]
  from [Третья однотипная таблица] group by id2, id

) X
group by id2, id_storage, id
2 сен 12, 17:37    [13101661]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
Xandir
Member

Откуда:
Сообщений: 7
А, понял. Получается выводит формата:

id2, id_storage, id, SUM([count])

Хотел видеть вида id2, id, SUM([count_1]) , SUM([count_2]), SUM([count_3])
Увидел одину на выходе - вот и подумал, что они ссумируются )
2 сен 12, 17:53    [13101699]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
aleks2
Guest
Xandir
А, понял. Получается выводит формата:

id2, id_storage, id, SUM([count])

Хотел видеть вида id2, id, SUM([count_1]) , SUM([count_2]), SUM([count_3])
Увидел одину на выходе - вот и подумал, что они ссумируются )


Молодца. Теперь открой BOL и прочитай про PIVOT.
2 сен 12, 18:10    [13101751]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
Xandir
Member

Откуда:
Сообщений: 7
PIVOT (max([count]) FOR id_storage in ([1],[2],[3]) )
pvt ругается на строку 1
select id2, id_storage, id,  SUM([count]) as [count]


автор
Сообщение 207, уровень 16, состояние 1, строка 1
Недопустимое имя столбца "id_storage".
Сообщение 207, уровень 16, состояние 1, строка 1
Недопустимое имя столбца "count".


что я не так сделал?
2 сен 12, 19:56    [13102094]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
Xandir
Member

Откуда:
Сообщений: 7
Всё, вроде бы собрал.
Результат получился такой:

Select * from (
select id2, id_storage, id, SUM([count]) as [count]
from
(
  select id2, 1 as id_storage, id, SUM([count]) as [count]
  from [Первая однотипная таблица] group by id2, id
  union all
  select id2, 2 as id_storage, id, SUM([count]) as [count]
  from [Вторая однотипная таблица] group by id2, id
  union all
  select id2, 3 as id_storage, id, SUM([count]) as [count]
  from [Третья однотипная таблица] group by id2, id

) X
group by id2, id_storage, id
) xx
PIVOT (max([count]) FOR id_storage in ([1],[2],[3]) ) pvt


Теперь осталось id2 поменять на "name" из таблицы 4, где id2 берем.
2 сен 12, 20:45    [13102263]     Ответить | Цитировать Сообщить модератору
 Re: [help] Выбор суммы из 3-х таблиц по 4-й  [new]
aleks2
Guest
Xandir
Всё, вроде бы собрал.
Результат получился такой:


Select * from (
  select id2, 1 as id_storage, id, SUM([count]) as [count]
  from [Первая однотипная таблица] group by id2, id
  union all
  select id2, 2 as id_storage, id, SUM([count]) as [count]
  from [Вторая однотипная таблица] group by id2, id
  union all
  select id2, 3 as id_storage, id, SUM([count]) as [count]
  from [Третья однотипная таблица] group by id2, id
) xx
PIVOT (max([count]) FOR id_storage in ([1],[2],[3]) ) pvt

Там одна группировка лишняя - я перестарался.
3 сен 12, 07:14    [13103064]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить