1

重複する行を削除する方法の例をたくさん見つけましたが、それらはすべて一意の整数IDを持つ行を含みます。

これが私が知る必要があることです。重複するすべてのstringIDをマージして、他の列の値を合計したいと思います。

私はこれを持っています:

stringID | v1 | v2 | v3
    a    | 2  |  3 | 4
    b    | 5  |  4 | 1
    a    | 1  |  1 | 2
    b    | 2  |  1 | 1

これ欲しい:

stringID | v1 | v2 | v3
    a    | 3  |  4 | 6
    b    | 7  |  5 | 2

お手伝いありがとう。

編集私はMySQLを使用しています

4

3 に答える 3

3

私は単純だと思います、GROUP BYそしてSUM()あなたが探している結果をあなたに与えるべきです:

SELECT
  StringID,
  SUM(v1) AS v1,
  SUM(v2) AS v2,
  SUM(v3) AS v3
FROM YourTable
GROUP BY StringID

SqlFiddleで実際に動作することを確認してください

于 2013-03-25T21:41:47.460 に答える
1

(免責事項:SQL-Server> = 2005を使用)

したがって、最初にすべてのレコードの合計で更新し、次に重複を削除します。

アップデート:

WITH CTE AS
(
    SELECT stringID, 
           v1_sum = SUM(v1) OVER (PARTITION BY stringID),
           v2_sum = SUM(v2) OVER (PARTITION BY stringID),
           v3_sum = SUM(v3) OVER (PARTITION BY stringID),
           RN = ROW_NUMBER()OVER(PARTITION BY stringId Order By stringId)
    FROM dbo.TableName
)
UPDATE tn SET v1 = v1_sum, v2 = v2_sum, v3 = v3_sum
FROM CTE c 
INNER JOIN dbo.TableName tn ON c.stringId=tn.stringId
WHERE c.RN = 1;

消去:

WITH CTE AS
(
    SELECT 
        RN = ROW_NUMBER()OVER(PARTITION BY stringId Order By stringId)
    FROM dbo.TableName
)
DELETE FROM CTE WHERE RN > 1;

デモ

于 2013-03-25T21:43:47.713 に答える
0

これを試して...

select stringID, sum(v1), sum(v2), sum(v3)
from yourtable
group by stringID
于 2013-03-25T21:42:11.667 に答える