【问题标题】:SQL Server : can't get join to work when using sumSQL Server:使用 sum 时无法加入工作
【发布时间】:2014-10-03 12:38:19
【问题描述】:

当我运行这个 sql 时:

SELECT 
    SUM(f.flex) as flex, 
    f.anv as anvid 
FROM 
    flex f 
GROUP BY 
    f.anv

我会得到:

 anvid   | flex
 ---------------
   2     |  120
   6     |  365 
   9     |  715 
  19     | 2485 
  20     | 1545 
  21     | 1833 
  22     |  796 
  35     | 1783 
  36     |  -15 
  37     |-1582 
  38     | 1999 
  59     |  510
  70     | -275

现在,我想在 flex.anv 和 tablecolumn anv.id 上进行连接,以便能够打印 anv.anvnamn(用户名)而不是上面的 id。

我尝试过这样的事情:

SELECT 
    SUM(f.flex) as flex, 
    a.anvnamn as anvnamn 
FROM
    flex f 
INNER/LEFT/RIGHT JOIN 
    anv a ON f.anv=a.id 
GROUP BY 
    f.anv

然后我得到一个错误:

列 'anv.anvnamn' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

谁能帮帮我?开始对此感到沮丧......

谢谢!

【问题讨论】:

  • 将 anv.anvnamn 添加到 GROUP BY 子句
  • 在第二个查询中,您更改了select 中的列,但没有在group by 子句中更改它。如果要选择a.anvnamn,只需将GROUP BY f.anv更改为GROUP BY a.anvnamn即可。

标签: sql join sum aggregate


【解决方案1】:

所以,把它放在group by 子句中:

SELECT sum(f.flex) as flex, a.anvnamn as anvnamn
from flex f JOIN
     anv a
     ON f.anv = a.id
GROUP BY a.anvnamn;

注意:如果两个 id 具有相同的名称,那么它们将被合并。如果您不想要这种行为,请使用:

GROUP BY a.anvnamn, f.anv;

【讨论】:

  • 谢谢大家!我以为我试过了,但显然我没有! :P
【解决方案2】:

只需将a.anvnamn 添加到您的GROUP BY 子句中即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    相关资源
    最近更新 更多