计算来自多个表的数据

Fhd*_*raf 4 sql sql-server asp.net grouping

我有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
Run Code Online (Sandbox Code Playgroud)

结果是

在此输入图像描述

我想让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
Run Code Online (Sandbox Code Playgroud)

因此,当我把它放在网格中时,我可以使用Counts作为页脚.像这样的东西,但每组之下的总数.

在此输入图像描述

gh9*_*gh9 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
Run Code Online (Sandbox Code Playgroud)

实质上,您希望通过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子句从左到右具有precendent,在分组中创建分组.如果将聚合应用于子组中的列,则聚合将神奇地(非常逻辑地,如果您了解sql引擎)适用于子组中的每个项目,并从每个新子组实例开始.

  • 我没有遇到很多像你一样改善答案的用户.大! (2认同)