【问题标题】:How to create a result from sql server with a summed column如何使用求和列从 sql server 创建结果
【发布时间】:2014-02-21 10:24:50
【问题描述】:

你好,我想要的是写一个查询来获取我 3 列:-

  1. nvarchar 列 1
  2. 整数值列 2
  3. 求和列的单个单元格2

有可能吗,我收到以下错误:-

消息 8120,第 16 级,状态 1,第 1 行 列 'tablename.columnname' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

以我希望获取的格式获取数据的正确程序是什么。

编辑

Jaques 的回答有效,但我没有得到我想要的。我想要的是:

column 1 PID | column 2 SID | column 3 | column 4 | Column 5(Total of 4)
-------------------------------------------------------------------------
1            | 1            | ABC      | 125.00   | 985.00
2            | 2            | XYZ      | 420.00   |
3            | 3            | DEF      | 230.00   |
4            | 4            | GHI      | 210.00   |

【问题讨论】:

  • 请在此处发布您的查询
  • 我无法构建这样的查询。但我确实知道这就像将单行关联到一组行。
  • 我无法为其构建查询。但我确实知道这就像将单行关联到一组行。这是整个场景:-我有一个包含 1,2,3,4 列的表,我必须从左侧的不同表中获取一列日期,在右侧获取一列总计。目标是获得一个标题,如 - 日期、ABC、XYZ、DEF、GHI、总计。列名 ABC、XYZ、DEF 和 GHI 是不同表中的行。请提供解决方案。
  • 检查我更新的答案。不过,我仍然不确定您为什么要这样做。

标签: sql sql-server sum correlated-subquery


【解决方案1】:

我怀疑您在某些列上使用了一些聚合函数,而没有在 group by 子句中列出剩余的列。您的查询应如下所示。

select sum(column2), column1 from table1
group by column1

【讨论】:

    【解决方案2】:

    可以通过以下方式进行,因为需要在group by中添加所有非聚合值,比较麻烦

    Select column1, column2, SUM(column2) OVER (PARTITION BY column1) as Total from [Table]
    

    这应该可行。

    您可以使用已编辑答案中的子选择来做到这一点,但为什么要这样呢?

    Select Column1, Column2, Column3, Column4, (Select SUM(Column4) from Table) as Column 5 from Table
    

    【讨论】:

    • 否如果我使用您提到的上述查询,我​​将得到一个错误组 - “消息 8120,第 16 级,状态 1,第 1 行列 'tablename.columnname' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。”
    • 嗨 Jacques,因为您已经进入编程领域,我想就参考什么提供一些建议,以便了解 RDBMS 和 sql server 的最佳实践以及 ASP.NET 开发中的最佳实践C#。我一直在学习新事物,但与这个行业脱节了,现在我回到了这个行业,我觉得很奇怪,当 MVC 来拯救时,人们仍在使用那些旧的 ADO.NET 和分层方法,这使得我记得所有这些,我的工作节奏慢了很多。您能否告诉我.net 开发的当前趋势到底是什么。
    • @user110246 如果您使用上述查询并执行它,您必须输入错误。确保您在子选择周围有( ),否则您将收到提到的错误。回答您的第二条评论。在我看来,MVC 只是现有技术的膨胀软件。您使用您认为最适合您的方法,以及帮助您更快完成工作的方法。如果这对你来说是 MVC,那就太棒了。我不太喜欢 ASP.NET,所以也许你应该在论坛上注册其他 ASP.NET 开发人员并与他们讨论。祝你好运
    • 如你所说,我进行的上述试验没有奏效,也许我对 sql server 不清楚。我能够将列列表作为变量中的逗号分隔值获取,但是当涉及到所有那些我不知道该怎么做的加起来时。您能否建议我如何在变量内添加逗号分隔列表中的列。
    【解决方案3】:

    您必须在 selectgroup by 子句中包含相同的列。

    如果要对所有值的列求和,则必须在 select 子句中包含每行具有不同值的列,如下所示:

    SELECT columnId, sum(column4) as total
    FROM MyTable
    GROUP BY columnId
    

    或者干脆不包括在选择任何额外的列,像这样:

    select sum(column4) from MyTable
    

    【讨论】:

    • 嗨 Jacques,我在数据透视表和临时表的帮助下完成了这项工作。可能会降低我的性能,但它有效
    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 2018-11-17
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2020-02-16
    • 1970-01-01
    相关资源
    最近更新 更多