gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:33:40 25 4
gpt4 key购买 nike

我有以下 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 行属于同一客户(测试客户),其具有不同的 ShipToCodes:1、2 和 3。第二个客户(ARACODE 客户)的情况与此类似。每个普通客户和普通客户 2 都只有 1 strip 有单个 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-测试客户)的相应记录。因此,如果我可以在上述查询(查询 2)中使用查询 1 的所有结果,那么我就可以为具有多条记录的客户获取所需的单条记录。这可以与第 (1) 点的结果相结合,以获得所需的最终结果。

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

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

最佳答案

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) 要删除记录,请使用删除查询而不是选择并将Where 子句更改为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;

关于sql - 从 SQL 表中删除重复行(基于多列中的值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30243945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com