对于具有多个该类型的 CARD# 的客户,删除最低的 CARD#

Deleting the lowest CARD# for customers with more than one CARD# of that type

提问人:Kieran Ferguson 提问时间:9/7/2023 最后编辑:Kieran Ferguson 更新时间:9/7/2023 访问量:23

问:

我有一个客户表,我需要删除存储了多个特定卡号的卡号的最小卡号。我可以为它编写一个选择查询,但是当我尝试将其转换为删除时,它不起作用。

  • || |||CustomerID Card#Card TypeTableID
  • |1 |123456 |AA级 |789 |
  • |1 |234567 |AA级 |999 |
  • |1 |98989881 |不列颠哥伦比亚省 |223 |
  • |2 |678945 |AA级 |123 |
  • |2 |987536 |AA级 |689 |
  • |2 |99978821 |不列颠哥伦比亚省 |334 |

对于AA类型的卡,预计每个客户只有一张卡#。它不应接触任何其他卡类型 #s。

sql-delete min

评论

0赞 Community 9/8/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。

答:

0赞 Levi 9/7/2023 #1

我不知道你想要的输出是什么,所以试试这个

DECLARE @TEMP_20230907 TABLE  
(
CustomerID INT,
Card# INT,
Card_Type NCHAR(2),
TableID INT
)
INSERT INTO @TEMP_20230907 
VALUES
(N'1',N'123456',N'AA',N'789'),
(N'1',N'234567',N'AA',N'999'),
(N'1',N'98989881',N'BC',N'223'),
(N'2',N'678945',N'AA',N'123'),
(N'2',N'987536',N'AA',N'689'),
(N'2',N'99978821',N'BC',N'334')

DELETE FROM @TEMP_20230907
WHERE Card# IN (
SELECT MIN(Card#) AS MIN_CARD
FROM @TEMP_20230907 
WHERE Card_Type = 'AA'
GROUP BY CustomerID,Card_Type
)

SELECT * FROM @TEMP_20230907

以上将删除最低卡号MSSQLAA

输出:

CustomerID  Card#    Card_Type  TableID
1           234567    AA         999
1           98989881  BC         223
2           987536    AA         689
2           99978821  BC         334

注意:还有其他方法可以达到相同的结果