[sql, ms reporting] подскажите по группироке в запросе, пожалуйста
что-то такое
select *
from Квартира
inner join Холодильник on Квартира.Квартира_Id = Холодильник.Квартира_Id
inner join
(
select Пакет_id as П_Id, Продукт_Id, Количество, 'Пакет' as kind
from Пакет
inner join Продукт_Пакет
on Пакет.Пакет_Id = Продукт_Пакет.Пакет_Id
union
select Коробка_id as П_Id, Продукт_Id, Количество, 'Коробка' as kind
from Коробка
inner join Продукт_Коробка
on Коробка.Коробка_Id = Продукт_Коробка.Коробка_Id
) as П
on Холодильник.Холодильник_Id = П.Холодильник_Id
select *
from Квартира
inner join Холодильник on Квартира.Квартира_Id = Холодильник.Квартира_Id
inner join
(
select Пакет_id as П_Id, Продукт_Id, Количество, 'Пакет' as kind
from Пакет
inner join Продукт_Пакет
on Пакет.Пакет_Id = Продукт_Пакет.Пакет_Id
union
select Коробка_id as П_Id, Продукт_Id, Количество, 'Коробка' as kind
from Коробка
inner join Продукт_Коробка
on Коробка.Коробка_Id = Продукт_Коробка.Коробка_Id
) as П
on Холодильник.Холодильник_Id = П.Холодильник_Id
есть у меня желание написать запрос, но вот никак не пойму, как это сделать1. Молча
2. Постепенно: сначала вывести квартиры, потом квартиры и холодильники, потом добавить ящики и т.д.
, спасибо!
почти получилось.
единственная загвоздка осталась вот в чем - при группировке по продуктам появляются пустые ячейки, если продукт есть в одном холодильнике и в коробках и в пакетах:

так как, видимо, Продукт_Коробка и Продукт_Пакет - разные таблицы
я попытался связать их с таблицей Продукт по Продукт_id, вот так:
но Visual Studio переделывает таблицу Продукт ниже union в Продукт_1 и считает ее другой таблицей, судя по всему:
почему так?
почти получилось.
единственная загвоздка осталась вот в чем - при группировке по продуктам появляются пустые ячейки, если продукт есть в одном холодильнике и в коробках и в пакетах:

так как, видимо, Продукт_Коробка и Продукт_Пакет - разные таблицы
я попытался связать их с таблицей Продукт по Продукт_id, вот так:
select *
from Квартира
inner join Холодильник on Квартира.Квартира_Id = Холодильник.Квартира_Id
inner join
(
select Пакет_id as П_Id, Продукт.Продукт_Id as Прод, Количество, Пакет.Холодильник_id as Холод_id, 'Пакет' as kind
from Пакет
inner join Продукт_Пакет
on Пакет.Пакет_Id = Продукт_Пакет.Пакет_Id
inner join Продукт on Продукт.Продукт_id = Продукт_Пакет.Продукт_id
union
select Коробка_id as П_Id, Продукт.Продукт_Id as Прод, Количество, Коробка.Холодильник_id as Холод_id, 'Коробка' as kind
from Коробка
inner join Продукт_Коробка
on Коробка.Коробка_Id = Продукт_Коробка.Коробка_Id
inner join Продукт on Продукт.Продукт_id = Продукт_Коробка.Продукт_id
) as П
on Холодильник.Холодильник_Id = П.Холод_Id
но Visual Studio переделывает таблицу Продукт ниже union в Продукт_1 и считает ее другой таблицей, судя по всему:
select *
from Квартира
inner join Холодильник on Квартира.Квартира_Id = Холодильник.Квартира_Id
inner join
(
select Пакет_id as П_Id, Продукт.Продукт_Id as Прод, Количество, Пакет.Холодильник_id as Холод_id, 'Пакет' as kind
from Пакет
inner join Продукт_Пакет
on Пакет.Пакет_Id = Продукт_Пакет.Пакет_Id
inner join Продукт on Продукт.Продукт_id = Продукт_Пакет.Продукт_id
union
select Коробка_id as П_Id, Продукт_1.Продукт_Id as Прод, Количество, Коробка.Холодильник_id as Холод_id, 'Коробка' as kind
from Коробка
inner join Продукт_Коробка
on Коробка.Коробка_Id = Продукт_Коробка.Коробка_Id
inner join Продукт_1 on Продукт_1.Продукт_id = Продукт_Коробка.Продукт_id
) as П
on Холодильник.Холодильник_Id = П.Холод_Id
почему так?
при группировке по продуктам появляются пустые ячейкикак группируешь?
> union в Продукт_1 и считает ее другой таблицей
во-первых, это не должно влиять
во-вторых, зачем тебя связка с Продукт, если ты в запросе не используешь данные из нее
в-третьих, связку с Продукт можно вынести из под скобок, т.к. оба варианта: и пакеты, и коробки приведены к одинаковому виду
) as П
on Холодильник.Холодильник_Id = П.Холод_Id
inner join Продукт on П.Продукт_Id = Продукт.Продукт_Id
группирую вот так:

связку с Продукт с удовольствием не стану добавлять, я ошибочно полагал, что это причина образования этих пустых ячеек

связку с Продукт с удовольствием не стану добавлять, я ошибочно полагал, что это причина образования этих пустых ячеек
ячейку кол-во тоже замени на сумму
заменил, тот же результат (бонус пустые ячейки)
тогда надо смотреть логику работы report generator-а
если убрать П_Id из внутренних select-ов что-нибудь меняется?
select Продукт_Id, Количество, 'Пакет' as kind
если убрать П_Id из внутренних select-ов что-нибудь меняется?
select Продукт_Id, Количество, 'Пакет' as kind
меняется, но не сказать, чтобы существенно)


у тебя там стоит группировка по полю количеству?
да. и по сумме пробовал также
да. и по сумме пробовал такжеубери из этой ячейки группировку, оставь просто сумму
о, один из вариантов получен

спасибо большое)
буду пробовать теперь первый вариант получить.

спасибо большое)
буду пробовать теперь первый вариант получить.
гэг зэбрэз, дэздэвлэн?
Оставить комментарий
leorita04
товарищи, добрый день!есть у меня желание написать запрос, но вот никак не пойму, как это сделать
может быть у кого есть идеи?
суть:
Имеются следующие таблицы:
Связи:
С одной квартире может быть N холодильников (1:N)
В одном холодильнике может быть N коробок (1:N)
В одном холодильнике может быть N пакетов (1:N)
В одной коробке может быть N продуктов с различным количеством, эти же продукты могут быть в другой коробке (N:N)
В одном пакете может быть N продуктов с различным количеством, эти же продукты могут быть в другом пакете (N:N)
Что я пытаюсь получить:
таблицу, в которой суммировалось бы отдельно количество по продуктам в коробках и пакетах
что-то вроде того (пытаюсь получить оба варианта):
Пишу в Visual Studio 2008 Reporting Services, группирую уже на форме отчета
Был такой вариант запроса, но он, очевидно, не верен: