Нужна помощь с формированием SQL запроса
Есть три таблицы:
TM
| id | idtm | nametm |
|---|---|---|
| 2 | 1 | отдел 1 |
| 3 | 11 | гараж 1 |
| 4 | 12 | гараж 2 |
| 5 | 2 | отдел 2 |
| 6 | 21 | гараж 3 |
| 7 | 22 | гараж 4 |
XK
| Код | idtm | xk |
|---|---|---|
| 1 | 11 | 1 |
| 2 | 12 | 1 |
| 3 | 21 | 2 |
| 4 | 22 | 2 |
RM
| Код | idtm | price |
|---|---|---|
| 1 | 12 | 500 |
| 2 | 12 | 500 |
| 3 | 21 | 1000 |
| 4 | 21 | 1000 |
| 5 | 21 | 1000 |
| 6 | 21 | 1000 |
| 7 | 22 | 800 |
| 8 | 3 | 1600 |
В TM хранится иерархия объектов, в XK связь id конкретного объекта с объектом верхнего уровня, в RM цены по конкретным объектам.
Необходимо получить сумму по объектам, но собрать ее на объекте верхнего уровня с его названием.
Имеем запрос:
SELECT tm.nametm, xk.xk, Sum(rm.price) AS [Sum-price]
FROM (tm INNER JOIN xk ON tm.idtm = xk.idtm) INNER JOIN rm ON tm.idtm = rm.idtm
GROUP BY tm.nametm, xk.xk;
| nametm | xk | Sum-price |
|---|---|---|
| гараж 2 | 1 | 1000 |
| гараж 3 | 2 | 4000 |
| гараж 4 | 2 | 800 |
Он как и ожидалось выводит сумму по конкретным объектам.
Если изменить запрос вот так:
SELECT xk.xk, Sum(rm.price) AS [Sum-price]
FROM (tm INNER JOIN xk ON tm.idtm = xk.idtm) INNER JOIN rm ON tm.idtm = rm.idtm
GROUP BY xk.xk;
, то он соберет данные как надо
| xk | Sum-price |
|---|---|
| 1 | 1000 |
| 2 | 4800 |
, но имя объекта, естественно, не подтянет.
Не могу сообразить как теперь по полю xk подтянуть соответственное название из таблицы TM, чтобы было вот так:
| xk | Sum-price | nametm |
|---|---|---|
| 1 | 1000 | отдел 1 |
| 2 | 4800 | отдел 2 |
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
SELECT xk.xk, Sum(rm.price) AS [Sum-price], tm.nametm
FROM (rm inner JOIN xk ON rm.idtm = xk.idtm) inner JOIN tm ON xk.xk = tm.idtm
GROUP BY xk.xk,tm.nametm