如何根据某些标准提取重复收费



我试图在数据集中找到重复的订单,我可以从中搜索。

表:Transaction_Data

列:Guest_ID、Order_ID、Name、Quote_Date、Arrival_Date、Sale_Location、Product_Code、Deposit_Amount

<表类> Guest_ID Order_ID 名称 Quote_Date Arrival_Date Sale_Location Product_Code Deposit_Amount tbody><<tr>1123455Guest112/1/202212/20/2022Location1Product11001123456Guest112/1/202212/20/2022Location1Product11002123457Guest212/2/202212/21/2022Location2Product21053123458Guest312/3/202212/22/2022Location3Product31101123459Guest112/1/202212/20/2022Location1Product1100

在您的分组表达式中有一个问题,您已经包含了Order_ID,但这是唯一的,因此不重复。要找到重复的字段,您需要从比较中删除该字段。

这个响应强调了一个标准的解决方案,通过使用ROW_NUMBER()窗口函数按您的分组集划分,选择只是重复的记录,然后我们只返回不是集中第一个记录的记录,所以只有重复的记录,而不是原始的。

  • 窗口函数为我们提供了一种跨数据集计算与整个集合内联的聚合表达式的方法,因此无需实际分组结果。

有一个警告,如果我们想对聚合的结果进行过滤或分组,我们需要使用CTE或子查询来计算窗口函数。

;WITH AggregatedData as
(
SELECT Guest_ID,Order_ID
,ROW_NUMBER() OVER( 
PARTITION BY Guest_ID, Quote_Date, Product_Code,Deposit_Amount 
ORDER BY Order_ID
) AS Order_Duplicate
,Name,Quote_Date,Arrival_Date
,Sale_Location,Product_Code,Deposit_Amount 
FROM Transaction_Data WHERE Quote_date >='2022-11-01' and Deposit_Amount NOT LIKE '-%'
)
SELECT Guest_ID,Order_ID,Name,Quote_Date,Arrival_Date
,Sale_Location,Product_Code,Deposit_Amount 
FROM AggregatedData 
WHERE Order_Duplicate > 1
ORDER BY Order_ID,Guest_ID

这应该只返回重复的记录,这通常更有用,因为这些记录代表最有可能需要撤销或退款的事务。

<表类>Guest_IDOrder_ID名称Quote_DateArrival_DateSale_LocationProduct_CodeDeposit_Amounttbody><<tr>1123456Guest112/1/202212/20/2022Location1Product11001123459Guest112/1/202212/20/2022Location1Product1100

最新更新