我有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的相对数量Count。我期望得到这样的结果
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
这样,当我将其放入网格中时,我可以将“计数”用作页脚。像这样,但每个组的总数之下。
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子句从左到右先行,用in分组创建分组。如果将聚合应用于子组中的列,则该聚合将神奇地(如果您了解sql引擎,则很合逻辑)可为子组中的每个项目工作,并从每个新的子组实例重新开始。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句