2011-12-22 21 views
1

我使用SQL Server 2000 我有一個表像下面刪除行:SQL查詢時,只有一列值複製

lr_no seq len  
8402606 003 48 
8410184 002 50 
8410184 003 30 
8411592 002 33 
8415732 005 12 
8416530 002 24 
8415732 004 27 

其中8410184 & 841573被複制。

我想過濾表,如果在重複lr_no的情況下,那麼根據max(len)選擇行。

最終輸出應該是

lr_no seq len  
    8402606 003 48 
    8410184 002 50 
    8411592 002 33 
    8416530 002 24 
    8415732 004 27 

誰能幫助?

回答

0
SELECT t.lr_no, t.seq, t.len 
    FROM YourTable t 
     INNER JOIN (SELECT lr_no, MAX(len) AS MaxLen 
         FROM YourTable 
         GROUP BY lr_no) q 
      ON t.lr_no = q.lr_no 
       AND t.len = q.MaxLen 
+0

其工作.many謝謝 – 2011-12-22 08:23:16

0
SELECT 
lr_no, max(seq) as seq, max(len) as len 
FROM 
table 
GROUP BY 
lr_no 

編輯

好吧,從頭開始:

SELECT 
    lr_no, seq, len 
FROM 
table t1 
WHERE 
not exists (
    SELECT 
    1 
    FROM 
    table t2 
    WHERE 
    t1.lr_no = t2.lr_no and 
    t2.len < t1.len) 
+0

這不會工作,因爲seq_no是在兩種情況下差異。我想忽略seq no和過濾器 – 2011-12-22 07:09:40

+0

我已更新以反映您的意見 – 2011-12-22 07:12:19

+0

8415732 005 12&8415732 004 27沒有理由輸出輸出我希望8415732 004 27由於其長度較長而被選中,但其seq_no較小。 – 2011-12-22 07:15:18