从SQL表中删除重复的行(基于多个列中的值)

维克拉姆

我有以下SQL表:

AR_Customer_ShipTo

+--------------+------------+-------------------+------------+
| ARDivisionNo | CustomerNo |   CustomerName    | ShipToCode |
+--------------+------------+-------------------+------------+
|           00 | 1234567    | Test Customer     |          1 |
|           00 | 1234567    | Test Customer     |          2 |
|           00 | 1234567    | Test Customer     |          3 |
|           00 | ARACODE    | ARACODE Customer  |          1 |
|           00 | ARACODE    | ARACODE Customer  |          2 |
|           01 | CBE1EX     | Normal Customer   |          1 |
|           02 | ZOCDOC     | Normal Customer-2 |          1 |
+--------------+------------+-------------------+------------+

(ARDivisionNo, CustomerNo,ShipToCode) 构成该表的主键。

如果您发现前3行属于同一客户(测试客户),他们具有不同的ShipToCode:1、2和3。第二个客户(ARACODE客户)也是如此。普通客户和普通客户2都只有1条记录,且只有一个记录ShipToCode

现在,我想在此表上查询结果,每个客户只有1条记录。因此,对于记录多于1条的任何客户,我想保留最高价值的记录ShipToCode

我尝试了各种方法:

(1)我可以很容易地获得客户列表,而表中只有一条记录。

(2)通过以下查询,我可以获取表中有多个记录的所有客户的列表。

[查询1]

SELECT ARDivisionNo, CustomerNo
FROM AR_Customer_ShipTo 
GROUP BY ARDivisionNo, CustomerNo
HAVING COUNT(*) > 1;

(3)现在,为了为ShipToCode上述查询返回的每条记录选择合适的内容,我不知道如何遍历上述查询返回的所有记录。

如果我做类似的事情:

[查询2]

SELECT TOP 1 ARDivisionNo, CustomerNo, CustomerName, ShipToCode  
FROM AR_Customer_ShipTo 
WHERE ARDivisionNo = '00' and CustomerNo = '1234567'
ORDER BY ShipToCode DESC

然后,我可以获得(00-1234567-Test Customer)的适当记录。因此,如果我可以在上述查询(查询2)中使用查询1的所有结果,那么我可以为具有多个记录的客户获得所需的单个记录。可以将其与点(1)的结果相结合,以获得所需的最终结果。

同样,这比我遵循的方法容易。请让我知道我该怎么做。

[注意:我只能使用SQL查询来执行此操作。我无法使用存储过程,因为我最终将使用“ Scribe Insight”执行该操作,该操作仅允许我编写查询。]

HaveNoDisplayName

Sample SQL FIDDLE

1)使用CTE根据每个客户的ARDivisionNo,CustomerNo获取最大船代号价值记录

WITH cte AS (
  SELECT*, 
     row_number() OVER(PARTITION BY ARDivisionNo, CustomerNo ORDER BY ShipToCode desc) AS [rn]
  FROM t
)
Select * from cte WHERE [rn] = 1

2)要删除记录,请使用“删除”查询,而不是“选择”并将“子句”更改为rn> 1。 Sample SQL FIDDLE

WITH cte AS (
  SELECT*, 
     row_number() OVER(PARTITION BY ARDivisionNo, CustomerNo ORDER BY ShipToCode desc) AS [rn]
  FROM t
)
Delete from cte WHERE [rn] > 1;

select * from t;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于多个列值删除表中的重复项

来自分类Dev

从数据表中删除基于多列的重复行

来自分类Dev

在SQL中,如何删除基于多列的重复行?

来自分类Dev

如何从表中删除重复的行但保留列值的总和

来自分类Dev

如何基于单列中的重复值删除工作表中的行

来自分类Dev

SQL计算多个表中的重复值

来自分类Dev

SQL-从表中删除重复的行

来自分类Dev

Ruby删除哈希数组中的重复条目,但基于多个值

来自分类Dev

如何删除基于多个列的重复值

来自分类Dev

SQL Server 2008 R2:从多个表中删除重复的行,并保留原始的行

来自分类Dev

基于多个条件的列中的值到行中的值

来自分类Dev

如何基于另一个表的多个列中的值从表中提取多个行,然后在SQL中进行串联?

来自分类Dev

Excel宏,读取工作表,删除列中没有基于值的数据的行

来自分类Dev

如何使用Transact SQL合并多个列中的值并删除任何重复项

来自分类Dev

从Microsoft SQL Server 2012表中删除部分重复的行(仅两列中的重复数据)

来自分类Dev

如果两个列数据匹配,则从SQL表中删除1个重复行

来自分类Dev

SQL从同一表中基于查询删除行?

来自分类Dev

SQL从同一表中基于查询删除行?

来自分类Dev

仅在重复的行中删除在特定列中包含NA的行(基于其他两列)

来自分类Dev

根据列标题值在多个工作表中删除列

来自分类Dev

通过shell脚本基于列值删除CSV中的行

来自分类Dev

如何基于列的值从列表中删除行

来自分类Dev

SQL:基于主表中的行值将多个表有条件地关联到单个表的最佳方法

来自分类Dev

SQL删除基于多个字段的重复行

来自分类Dev

删除特定列中具有特定值的重复行

来自分类Dev

根据列值删除行中的重复项

来自分类Dev

根据特定的列值在熊猫中删除半重复行

来自分类Dev

Excel-突出显示并删除行中重复的列值

来自分类Dev

删除两列中具有重复值的行

Related 相关文章

  1. 1

    基于多个列值删除表中的重复项

  2. 2

    从数据表中删除基于多列的重复行

  3. 3

    在SQL中,如何删除基于多列的重复行?

  4. 4

    如何从表中删除重复的行但保留列值的总和

  5. 5

    如何基于单列中的重复值删除工作表中的行

  6. 6

    SQL计算多个表中的重复值

  7. 7

    SQL-从表中删除重复的行

  8. 8

    Ruby删除哈希数组中的重复条目,但基于多个值

  9. 9

    如何删除基于多个列的重复值

  10. 10

    SQL Server 2008 R2:从多个表中删除重复的行,并保留原始的行

  11. 11

    基于多个条件的列中的值到行中的值

  12. 12

    如何基于另一个表的多个列中的值从表中提取多个行,然后在SQL中进行串联?

  13. 13

    Excel宏,读取工作表,删除列中没有基于值的数据的行

  14. 14

    如何使用Transact SQL合并多个列中的值并删除任何重复项

  15. 15

    从Microsoft SQL Server 2012表中删除部分重复的行(仅两列中的重复数据)

  16. 16

    如果两个列数据匹配,则从SQL表中删除1个重复行

  17. 17

    SQL从同一表中基于查询删除行?

  18. 18

    SQL从同一表中基于查询删除行?

  19. 19

    仅在重复的行中删除在特定列中包含NA的行(基于其他两列)

  20. 20

    根据列标题值在多个工作表中删除列

  21. 21

    通过shell脚本基于列值删除CSV中的行

  22. 22

    如何基于列的值从列表中删除行

  23. 23

    SQL:基于主表中的行值将多个表有条件地关联到单个表的最佳方法

  24. 24

    SQL删除基于多个字段的重复行

  25. 25

    删除特定列中具有特定值的重复行

  26. 26

    根据列值删除行中的重复项

  27. 27

    根据特定的列值在熊猫中删除半重复行

  28. 28

    Excel-突出显示并删除行中重复的列值

  29. 29

    删除两列中具有重复值的行

热门标签

归档