[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
есть у меня желание написать запрос, но вот никак не пойму, как это сделать1. Молча
2. Постепенно: сначала вывести квартиры, потом квартиры и холодильники, потом добавить ящики и т.д.
почти получилось.
единственная загвоздка осталась вот в чем - при группировке по продуктам появляются пустые ячейки, если продукт есть в одном холодильнике и в коробках и в пакетах:
так как, видимо, Продукт_Коробка и Продукт_Пакет - разные таблицы
я попытался связать их с таблицей Продукт по Продукт_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
связку с Продукт с удовольствием не стану добавлять, я ошибочно полагал, что это причина образования этих пустых ячеек
ячейку кол-во тоже замени на сумму
заменил, тот же результат (бонус пустые ячейки)
если убрать П_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, группирую уже на форме отчета
Был такой вариант запроса, но он, очевидно, не верен: