Помощь с несколькими группами по SQL Server Query - PullRequest
1 голос
/ 03 июня 2009

У меня проблемы с получением данных из 2 таблиц с использованием мультигруппы "group by".

Ниже приведены 2 таблицы, например, и результат, который я хотел бы получить из моего запроса.

PrdID    Name   KG
------------------
1    Hals       10
2    Hals       3
3    Kugel      4
4    Kugel      10
5    Hals       12
6    Kugel      11
7    Hals       12
8    Hals       14
9    Hals       15
10   Kugel      16
11   Hals       8
12   Hals       15
13   Kugel      7
14   Kugel      8
15   Kugel      9

Материалы

PrdId    MatID    MatSize
-------------------------
1    a    300/600
2    b    350/500
5    c    400/650
3    b    350/500
4    c    400/650
6    d    450/650
9    b    350/500
10   d    450/650
13   d    450/650
11   c    400/650
12   b    350/500
14   c    400/650
15   d    450/650
7    a    300/600
8    b    350/500

Таблица результатов

Name     MatSize    Kg
----------------------
Hals    300/600    22
Hals    350/500    47
Hals    400/650    20
Kugel   350/500    4
Kugel   400/650    18
Kugel   450/650    43

В итоге я хочу узнать количество килограммов, использованных на каждый продукт на каждом материале ...

1 Ответ

4 голосов
/ 03 июня 2009

Я думаю, это то, что вы хотите

select P.Name, M.MatSize, sum(P.KG) as Kg
from Products P
join Material M
on P.PrdId = M.PrdId
Group By P.Name, M.MatId, M.MatSize

(отредактировано для возврата только столбцов wnted)

В качестве дополнения, могу ли я предложить вам еще немного нормализовать ваши таблицы, например Products [PrdId, Name, Kg] Материалы [MatId, MatSize] ProductMaterials [PrdId, MatId]

Тогда запрос станет

select P.Name, M.MatSize, sum(P.KG) as KG
from Products P
join ProductMaterial PM
on PM.PrdId = P.PrdId
join Materials M
on M.MatId = PM.MatId
group by P.Name, M.MatId, P.MatSize

Преимущество этого заключается в том, что вы сохраняете MatSize только один раз для каждого типа материала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...