2012-10-21 50 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