2012-10-21 76 views
1

我有這樣的數據:SQL服務器:與同列的值多行,除了一個

name_text ----------c_num---d_type-----unique_id----------------------v_text--r_ticket_id 
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01 28600206 
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01 28600240 
Copy.docx    3560715 Guide 9D06F8EFF4EC4A2D862F5A0DB3BA357B 2  28600219 

我想選擇只有一個排它有r_ticket_id列的更大的價值,如果name_textc_numd_typeunique_idv_text列值相等。

在這種情況下,使用select語句只需提取這些列。

name_text ----------c_num---d_type-----unique_id----------------------v_text--r_ticket_id 
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01 28600240 
Copy.docx    3560715 Guide 9D06F8EFF4EC4A2D862F5A0DB3BA357B 2  28600219 

什麼是將完成這項工作的確切的SQL查詢?

+0

是否有任何可能性記錄可能具有相同的唯一ID但在每列上具有不同的值? –

回答

4

這可能對記錄可能具有相同的唯一標識但在每列上具有不同值時有幫助。利用ROW_NUMBER和窗口功能。我想他們已經存在的SQL Server 2005的

SELECT name_text,c_num,d_type,unique_id,v_text,r_ticket_id 
FROM 
    (
     SELECT name_text, c_num, d_type, unique_id, v_text, r_ticket_id, 
       ROW_NUMBER() OVER (PARTITION BY unique_id 
            ORDER BY r_ticket_id DESC) rn 
     FROM tableName 
    ) x 
WHERE x.rn = 1 

SQLFiddle Demo

+1

感謝您提供合理而有益的答案。 –

+1

不客氣@MehmetAliSert!很高興它有幫助。 :d –

2

在SQL上,我們有GROUP BY操作,使我們能夠鞏固重複行。在你的問題中,你想要彙總除r_ticket_id.之外的所有相同的值。對於那個,你希望找到在SQL中轉換爲MAX函數的最大值。

SELECT 
    name_text 
, c_num 
, d_type 
, unique_id 
, v_text 
, MAX(r_ticket_id) AS max_r_ticket_id 
FROM 
    dbo.MyTableNameHere 
GROUP BY 
    name_text 
, c_num 
, d_type 
, unique_id 
, v_text