重复行(基于从多个列中的值)我具有以下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行属于同一个客户(测试客户),他们有不同的ShipToCodes:1,2和3.与第二个客户(ARACODE客户)的情况类似。普通客户和普通客户2中的每一个都只有一个记录,并且只有一个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)中使用query-1中的所有结果,那么我可以为拥有多条记录的客户获取所需的单个记录。这可以与来自点(1)的结果相结合以实现期望的最终结果。
再次,这可能比我所遵循的方法更容易。请让我知道我该怎么做。我不得不使用SQL查询来做这个。我不能使用存储过程,因为我将最终使用'Scribe Insight'来执行这个事情,它只允许我写查询。]
可能重复的[如何删除sql server中的重复行?](http://stackoverflow.com/questions/18390574/how-to-delete-duplicate-rows-in-sql-server) –