SQL Server:具有相同列值的多个行,除了一个

时间:2012-10-21 14:35:14

标签: sql sql-server tsql

我有这样的数据:

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_idname_textc_numd_type,{{我想要选择一行unique_id列值更大的行1}}列值相等。

在这种情况下,使用select语句只需要获取此列。

v_text

完成这项工作的确切SQL查询是什么?

2 个答案:

答案 0 :(得分:5)

当记录可能具有相同的唯一ID但每列具有不同的值时,这可能会有所帮助。利用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 :(得分: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