2013-04-01 52 views
1

我的MySQL表有如下记录,安排重复和编号记录在一个序列 - MySQL的

ID Name Account 
----------------------------------------- 
    1 ABC PQR 
    2 DEF PQR 
    3 ABC PQR 
    4 XYZ ABC 
    5 DEF PQR 
    6 DEF ABC 

我正在寻找像

ID Name Account Duplicate Sr No. 
----------------------------------------- 
    1 ABC PQR  1 
    2 DEF PQR  1 
    3 ABC PQR  2 
    4 XYZ ABC  1 
    5 DEF PQR  2 
    6 DEF ABC  1 

这里的输出我的意思是每个副本应该有一个Sr编号或重复号码。

名称:ABC和帐户:表中重复的焊接工艺评定时,存在重复Sr否增量从1到2

+0

可能重复http://stackoverflow.com/questions/15656332/how-to-give-number-to-occurrence-in-sql – Dhinakar

回答

2

的MySQL还不支持Window Function像任何其他RDBMS。这种行为与ROW_NUMBER()类似,它给出了组中每个记录的等级编号。在mysql中,这可以通过使用用户变量来模拟。

SELECT ID, Name, Account, DuplicateSR_No 
FROM 
     (
      select ID, 
        Name, 
        Account, 
        @sum := if(@nme = Name AND @acct = Account, @sum ,0) + 1 DuplicateSR_No, 
        @nme := Name, 
        @acct := Account 
      from TableName, 
        (select @nme := '', @sum := 0, @acct := '') vars 
      order by Name, Account 
     ) s 
ORDER BY ID 

输出

╔════╦══════╦═════════╦════════════════╗ 
║ ID ║ NAME ║ ACCOUNT ║ DUPLICATESR_NO ║ 
╠════╬══════╬═════════╬════════════════╣ 
║ 1 ║ ABC ║ PQR  ║    1 ║ 
║ 2 ║ DEF ║ PQR  ║    1 ║ 
║ 3 ║ ABC ║ PQR  ║    2 ║ 
║ 4 ║ XYZ ║ ABC  ║    1 ║ 
║ 5 ║ DEF ║ PQR  ║    2 ║ 
║ 6 ║ DEF ║ ABC  ║    1 ║ 
╚════╩══════╩═════════╩════════════════╝ 
+0

WOW!这工作像一个魅力。谢谢JW! – Guns

2

尝试:

SELECT t1.id, t1.name, t1.account 
     , (SELECT COUNT(*) 
      FROM tableName t2 
      WHERE t2.name = t1.name 
      AND t2.account = t1.account 
      AND t2.id <= t1.id) AS dupno 
    FROM tableName t1; 

输出:

ID NAME ACCOUNT DUPNO 
-- ---- ------- ----- 
1 ABC PQR   1 
2 DEF PQR   1 
3 ABC PQR   2 
4 XYZ ABC   1 
5 DEF PQR   2 
6 DEF ABC   1