通过SQL Server查询帮助多个组

时间:2009-06-03 10:10:00

标签: sql sql-server

使用多个“分组依据”从2个表中检索数据时遇到了一些麻烦。

以下是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

总之,我想知道每种材料上每种产品使用的Kg量......

1 个答案:

答案 0 :(得分:4)

我认为这就是你想要的

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

(编辑只返回有意义的列)

作为一方,我是否可以建议您将表格更多地标准化为产品[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。