Sql server 2008 如何求一组和?SQL Server 2008

Sql server 2008 如何求一组和?SQL Server 2008,sql-server-2008,group-by,sum,inner-join,Sql Server 2008,Group By,Sum,Inner Join,我有一个查询,其中有一个sum,如下所示: SELECT Table1.ID, SUM(Table2.[Number1] + Table2.[Number2]) AS SumColumn FROM Table1 INNER JOIN Table3 ON Table1.ID = Table3.ID INNER JOIN Table2 ON Tab

我有一个查询,其中有一个sum,如下所示:

SELECT
    Table1.ID, SUM(Table2.[Number1] + Table2.[Number2]) AS SumColumn
FROM         Table1 INNER JOIN
                      Table3 ON Table1.ID = Table3.ID 
                    INNER JOIN
                      Table2 ON Table3.ID = Table2.ID
WHERE     (Table2.[Something] = 'Whatever')

GROUP BY Table1.ID,  Table2.[Number1] , Table2.[Number2]
ID  SumColumn
67  1
67  4
70  2
70  6
70  3
70  6
80  5
97  1
97  3
它给了我一张这样的桌子:

SELECT
    Table1.ID, SUM(Table2.[Number1] + Table2.[Number2]) AS SumColumn
FROM         Table1 INNER JOIN
                      Table3 ON Table1.ID = Table3.ID 
                    INNER JOIN
                      Table2 ON Table3.ID = Table2.ID
WHERE     (Table2.[Something] = 'Whatever')

GROUP BY Table1.ID,  Table2.[Number1] , Table2.[Number2]
ID  SumColumn
67  1
67  4
70  2
70  6
70  3
70  6
80  5
97  1
97  3
我怎样才能让它给我一个这样的表,其中SumColumn被求和,按ID列分组

ID   SumColumn
67   5
70   17
80   5
97   4
我无法按SumColumn分组,因为我收到一个错误,该错误导致列名“SumColumn”无效。联合也不起作用。提前谢谢

编辑:

仅按ID进行分组就产生了一个错误:

[Number1、Number2和我正在选择的其他列名]在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

编辑2

不知道为什么,只是按Table.ID进行分组现在似乎起作用了。感谢所有贴出正确答案的人,我希望我能全部勾选

您是否尝试过:

SELECT
    Table1.ID, SUM(Table2.[Number1] + Table2.[Number2]) AS SumColumn
FROM         Table1 INNER JOIN
                      Table3 ON Table1.ID = Table3.ID 
                    INNER JOIN
                      Table2 ON Table3.ID = Table2.ID
WHERE     (Table2.[Something] = 'Whatever')
GROUP BY Table1.ID
我不明白为什么上述方法不起作用,除非您在查询中没有适当地为表别名,这更多的是一个语法错误而不是逻辑错误,但无论如何从SQL引擎的角度来看是“错误的”。每当SQL代码对我不起作用时,我都会简化令人厌恶的查询,直到它失败的原因变得明显为止。在这种情况下,我会尝试:

SELECT ID, SUM(sumCol) as SumColumn
FROM (
    SELECT
        Table1.ID, (Table2.[Number1] + Table2.[Number2]) AS sumCol
    FROM         Table1 INNER JOIN
                          Table3 ON Table1.ID = Table3.ID 
                        INNER JOIN
                          Table2 ON Table3.ID = Table2.ID
    WHERE     (Table2.[Something] = 'Whatever')
)
GROUP BY Table1.ID
。。。我允许以下嵌套查询出现任何错误!通知我进一步调查。

试试这个

SELECT
    Table1.ID, SUM(Table2.[Number1] + Table2.[Number2]) AS SumColumn
FROM         Table1 INNER JOIN
                      Table3 ON Table1.ID = Table3.ID 
                    INNER JOIN
                      Table2 ON Table3.ID = Table2.ID
WHERE     (Table2.[Something] = 'Whatever')

GROUP BY Table1.ID

听起来您只需要按Table1.ID进行分组

SELECT
    Table1.ID, SUM(Table2.[Number1] + Table2.[Number2]) AS SumColumn
FROM         Table1 INNER JOIN
                      Table3 ON Table1.ID = Table3.ID 
                    INNER JOIN
                      Table2 ON Table3.ID = Table2.ID
WHERE     (Table2.[Something] = 'Whatever')

GROUP BY Table1.ID
由于SUM是一个聚合函数,它将处理将数字分组在一起的问题,因此您只需指定如何对所需的其他列进行分组

[更新]

演示代码:

CREATE TABLE #T1(
    ID      INT
)
CREATE TABLE #T2 (
    ID              INT,
    Something       VARCHAR(32),
    Number1         INT,
    Number2         INT
)
CREATE TABLE #T3 (
    ID      INT
)
DECLARE @Index INT = 0

WHILE @Index < 50
BEGIN
    DECLARE @Something VARCHAR(32) = ''

    SET @Index = @Index + 1
    IF @Index BETWEEN 0 AND 15
        SET @Something = 'Blah'
    ELSE IF @Index BETWEEN 15 AND 40
        SET @Something = 'Whatever'
    ELSE IF @Index BETWEEN 40 AND 50
        SET @Something = 'Bleh'
    INSERT INTO #T1 VALUES(@Index)
    INSERT INTO #T3 VALUES(@Index)
    INSERT INTO #T2 VALUES(@Index, @Something, RAND()*100, RAND() * 100)
    INSERT INTO #T2 VALUES(@Index, @Something, RAND()*100, RAND() * 100)
    INSERT INTO #T2 VALUES(@Index, @Something, RAND()*100, RAND() * 100)
END

SELECT
    #T1.ID, SUM(#T2.Number1 + #T2.Number2) AS SumColumn
FROM         #T1 INNER JOIN
                      #T3 ON #T1.ID = #T3.ID 
                    INNER JOIN
                      #T2 ON #T3.ID = #T2.ID
WHERE     (#T2.Something = 'Whatever')
GROUP BY #T1.ID

您是否尝试过嵌套选择

SELECT ID, SUM(SumColumn) AS SumColumn
FROM (SELECT Table1.ID AS ID, SUM(Table2.[Number1] + Table2.[Number2]) AS SumColumn
      FROM Table1 
           INNER JOIN Table3 ON Table1.ID = Table3.ID 
           INNER JOIN Table2 ON Table3.ID = Table2.ID
      WHERE (Table2.[Something] = 'Whatever')
      GROUP BY Table1.ID,  Table2.[Number1] , Table2.[Number2])
GROUP BY ID

SELECT Table1.ID….GROUP BY Table1.Att1应给出一个错误,您无法选择ID,因为它不在GROUP BY或聚合函数中-这两个列是否都是同一列,并且您在示例中忘记更改了一个?回复:您最近的编辑该错误是自解释的,不是吗?SUMNumber1+Number2正常。Number1,Number2不是。无法在用于group by子句的group by列表的表达式中使用聚合或子查询。嗯,这对我很有效。我试图复制错误,但没有成功。请参见上面的示例。@billynomates。。。是的,看到了新的和改进的答案:-我不知道刚刚发生了什么。我开始简化,就像你说的那样,去掉内部的SELECT子句,看看这是否有效,但添加了GROUP by。就像你在第一个例子中说的。它起作用了!我所看到的与我出错时没有什么不同,但还是非常感谢。对于阅读本文的其他人来说,我根本不需要嵌套的SELECT,每个最初发布的人都是正确的。@billynomates-无法告诉您完美的SQL没有运行多少次,但像侦探一样逐步调整代码最终完成了这项工作!