假设有一个表,该表具有多个相同的行。我可以通过
复制不同的值SELECT DISTINCT * INTO DESTINATIONTABLE FROM SOURCETABLE
,但是如果该表具有名为value的列,并且为简单起见,对于该表中的一个特定项,其值为1。现在,该行还有9个重复项。因此,该特定项目的value列的总和为10。现在,我要删除9个重复项(或复制我提到的唯一值),对于该项目,该值现在应显示10而不是1。达到了?
item| value
----+----------------
A | 1
A | 1
A | 1
A | 1
B | 1
B | 1
我想显示如下
item| value
----+----------------
A | 4
B | 2
预先感谢
答案 0 :(得分:1)
您可以尝试使用SUM
和group by
SELECT item,SUM(value) value
FROM T
GROUP BY item
SQLfiddle:http://sqlfiddle.com/#!18/fac26/1
[结果] :
| item | value |
|------|-------|
| A | 4 |
| B | 2 |
答案 1 :(得分:0)
从广义上讲,您可以给我们一个和和一个GROUP BY子句。
类似的东西:
SELECT column1, SUM(column2) AS Count
FROM SOURCETABLE
GROUP BY column1
这里正在起作用:Sum + Group By
由于您的表可能不仅是两列数据,因此以下是一个稍微复杂的示例,该示例显示了如何对更大的表执行此操作:SQL Fiddle
请注意,我已经单独选择了行,以便可以访问必要的数据,而不是使用
SELECT *
我已经实现了这一结果,而无需将数据选择到另一个表中。
编辑2 :
在您的注释之后,听起来您想更改表中的实际数据,而不仅仅是查询它。可能有一种更优雅的方法来执行此操作,但是一种简单的方法是使用以上查询来填充临时表,删除现有表的内容,然后将所有数据移回。要在现有示例中做到这一点:
WITH MyQuery AS (
SELECT name, type, colour, price, SUM(number) AS number
FROM MyTable
GROUP BY name, type, colour, price
)
SELECT * INTO MyTable2 FROM MyQuery;
DELETE FROM MyTable;
INSERT INTO MyTable(name, type, colour, price, number)
SELECT * FROM MyTable2;
DROP TABLE MyTable2;
警告:如果您要尝试使用此功能,请先使用开发环境(即您不介意破坏环境!),以确保其能够完全满足您的要求。您的初始查询必须捕获所需的数据 ALL 。
以下是该示例的SQL Fiddle:SQL Fiddle