首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server将多行合并为一个-没有临时表

Server将多行合并为一个-没有临时表
EN

Stack Overflow用户
提问于 2014-04-10 14:50:18
回答 2查看 1.4K关注 0票数 1

我希望看到一种最简洁的方法来完成这个SO问题中概述的内容:Sum values from multiple rows into one row,即合并多个行,同时对一列进行求和。

但如何删除副本。换句话说,我有这样的数据:

代码语言:javascript
复制
Person  Value
--------------
1         10
1         20
2         15

我希望将任何重复( Person )的值求和到一行中,并去掉Person值上的其他重复值。所以我的产出是:

代码语言:javascript
复制
Person  Value
-------------
1        30
2        15

我不想用临时表来做这件事。我想我需要使用OVER PARTITION BY,但不确定。只是想挑战我自己不要用临时表的方式。使用Server 2008 R2

简单地说,给我一个简洁的stmt从我的输入到我在同一表中的输出。所以如果我的表名是People,如果我在这个问题中所问的操作之前对它做了一个select * from People,我得到上面的第一个集合,然后当我在操作之后做一个select * from People时,我得到上面的第二个数据集。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-10 15:39:52

不知道为什么不使用Temp表,但这里有一种避免它的方法(这是过度的):

代码语言:javascript
复制
UPDATE MyTable SET VALUE = (SELECT SUM(Value) FROM MyTable MT WHERE MT.Person = MyTable.Person);

WITH DUP_TABLE AS
   (SELECT ROW_NUMBER()
    OVER (PARTITION BY Person ORDER BY Person) As ROW_NO
    FROM MyTable)
DELETE FROM DUP_TABLE WHERE ROW_NO > 1;

首先,查询将每个重复的人更新为摘要值。第二个查询删除重复的人员。

演示: http://sqlfiddle.com/#!3/db7aa/11

票数 2
EN

Stack Overflow用户

发布于 2014-04-10 14:56:22

您所要求的只是一个简单的SUM()聚合函数和一个GROUP BY

代码语言:javascript
复制
SELECT Person, SUM(Value)
FROM myTable
GROUP BY Person

SUM()本身将总结列中的值,但是当您添加辅助列和GROUP BY列时,SQL将显示来自辅助列的不同值,并根据这些不同的类别执行聚合函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22991518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档