oleja1ee7
@oleja1ee7

Возможно ли составить подобный запрос?

Здравствуйте, каким образом можно сделать запрос, чтоб в итоге появилась таблица подобная данной:
spoiler
5c5dbfdebfc81366484721.png

количество рек, как я понимаю можно подставлять через конструкцию типа WHERE IN(
Как тогда быть с столбцами? количество перевозчиков тоже будет изменяться в зависимости от потребностей.
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
pivot
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
NeiroNx
@NeiroNx
Программист
Когда достаточно хорошо знаешь возможности диалекта все легко и протсо
диалект TransactSQL
DECLARE @mass = (SELECT SUM(value) FROM transact)
SELECT t.river, 
SUM(CASE WHEN t.driver IN (1,2,3)THEN t.value ELSE 0 END) AS 'pervochik1',
SUM(CASE WHEN t.driver IN (4,5,6)THEN t.value ELSE 0 END) AS 'pervochik2',
SUM(CASE WHEN t.driver IN (7,8,9)THEN t.value ELSE 0 END) AS 'pervochik3',
SUM(t.value) AS 'itog',
p.value AS 'plan',
SUM(t.value)/@mass AS 'procent'
FROM transacts t
LEFT JOIN plan p ON p.river = t.river
GROUP BY t.river, p.value
Ответ написан
Комментировать
@Vitsliputsli
Как делать запрос зависит от того, как хранятся данные в БД.
А если вы хотели спросить как это хранить в БД, то если количество рек и перевозчиков может быть любое, то можно использовать модель Attribute Entity Value. Но собирать данные по такой модели сложно, а при неопределенном кол-ве столбцов нужно будет динамически собирать запрос. Как уже написали используется для этого pivot, это очень затратная операция, так что если есть возможность лучше рассмотреть другие варианты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы