我有3张桌子T1,T2,T3。 他们每个人都与另一个人有关系。
SELECT T1.T1_Serno, T2.T2_Serno, T3.T3_Serno, T1.T1,COUNT( T3.T3_Serno) as Count_1, T2.T2, T3.T3, T3.Quantity
FROM T1 INNER JOIN
T2 ON T1.T1_Serno = T2.T1_Serno INNER JOIN
T3 ON T2.T2_Serno = T3.T2_Serno
GROUP BY T1.T1_Serno, T2.T2_Serno, T3.T3_Serno, T1.T1, T2.T2, T3.T3, T3.Quantity
,结果是
我希望让Count_1向我显示有多少T3,而Count_2有相对的T3数量。 我期待像
这样的结果 T2 T3 Count_1 Count_2
Apple Apple1 3 80
Apple Apple2 3 80
Apple Apple3 3 80
-------
Google Google1 1 40
------
Nokia Nokia1 1 15
因此,当我把它放在网格中时,我可以使用Counts作为页脚。 这样的事情,但每个集团下面的总数。
答案 0 :(得分:7)
SELECT t2.t2,t3.t3,sum(t3.Quantity)
FROM T2 AS T2
INNER JOIN T3 AS T3 ON t3.t2_serno = t2.t2_serno
GROUP BY t2.t2,t3.t3
实质上,您希望通过1个主要分组(t2)和1个次要分组(t3)对事物进行分组。因此,当您执行sql server group by
时,它会在分组中创建分组(如果您有多个分组元素)。最左边的分组元素将是主要分组,从左到右的读数将是子分组。这就是我GROUP By t2.t2,t3.t3
的方式。
一旦我理解了你想要它如何分组,我就看了一下列数量。您想要t3中数量列的总和。由于t3.t3是t2.t2的子组,因此sql server将列聚合应用于t3.t3子组的所有行,该子组已经由t2.t2分组分组。
<强> TL; DR 强>: sql server中的group by子句从左到右具有前导,在分组中创建分组。如果将聚合应用于子组中的列,则聚合将神奇地(非常逻辑地,如果您了解sql引擎)适用于子组中的每个项目,并从每个新子组实例开始。