MySQL合并数量为2行

时间:2009-07-02 10:53:29

标签: mysql

我正在寻找创建一个更新大量数据的sql语句。

我所拥有的是像

这样的表格
id,   transid,   amount,   narative1,  narative 2, total,    active
1     1234       23.2        NULL        NULL        NULL      1
2     1234       120.33      NULL        NULL        NULL      1
3     1235       98.00       NULL        NULL        NULL      1

如果有两行具有相同的transid,我需要总计将结果放在第一个的总列中,并将第二个数量放在第一个实例的naritive2中,并使第二个数量为非活动状态。它应该忽略transid的单行。

我想做的结果应该是:

id,   transid,   amount,   narative1,  narative 2, total,      active
1     1234       23.2        NULL        120.33      143.53     1     
2     1234       120.33      NULL        NULL        NULL       0
3     1235       98.00       NULL        NULL        NULL       1

我知道有点丁字裤,但是......

理想情况下,我只想在MySQL语句中执行此操作。所以我不介意做多个sql语句,但我想避免将它连接到PHP等。它是一个非常大的数据集。

1 个答案:

答案 0 :(得分:3)

这将仅更新具有2行(不是1而非3或更多行)的交易。

UPDATE  mytable mtu
JOIN    (
        SELECT  minid, maxid, mtmin.amount AS minamt, mtmax.amount AS maxamt
        FROM    (
                SELECT  MIN(id) AS minid, MAX(id) AS maxid
                FROM    mytable mti
                GROUP BY
                        transid
                HAVING  COUNT(*) = 2
                ) mt
        JOIN    mytable mtmin
        ON      mtmin.id = minid
        JOIN    mytable mtmax
        ON      mtmax.id = maxid
        ) mts
ON      id IN (minid, maxid)
SET     narative2 = CASE id WHEN minid THEN minamt ELSE NULL END,
        total = CASE id WHEN minid THEN minamt + maxamt ELSE NULL END,
        active = (id = minid)