当特定的列组合确定其重复性时,如何排除sql中的数据?
Posted
技术标签:
【中文标题】当特定的列组合确定其重复性时,如何排除sql中的数据?【英文标题】:How to exclude data in sql when a particular combination of columns determine its duplicativeness? 【发布时间】:2019-12-11 11:08:09 【问题描述】:据我所知,我有一个数据集是正确的。如下所示。
enter image description here
QuoteStatus Quoteid batchID EffDate Iteration Months Revenue
1 Block Ready 275576 900265 3/1/2019 1 1096 635791
2 Block Ready 275654 900265 3/1/2019 1 1096 635791
3 Sold 275654 900265 3/1/2019 2 1096 635791
但是,我有一个要求,当某些列组合在一起时,每条记录必须是唯一的。
从结果集中——我认为这是一条重复记录,因为 QuoteStatus = ‘Block Ready’ 和 Iteration = ‘1’ 的组合重复了不止一次。 (即使 QuoteID 是不同的) 我不希望第 1 行出现,我不能简单地从 Select 语句中删除“QuoteID”,因为我希望它显示。
我已尝试将 ROW_NUMBER ( ) OVER ( PARTITION BY QuoteId Order by QuoteID ) 作为 ROW_Partition。但是结果不是我想要的。我不能排除 ROW_Partition = '1' 因为那仍然会留下第 2 行。
QuoteStatus Quoteid batchID EffDate Iteration ROW_Partition Months Revenue
1 Block Ready 275576 900265 3/1/2019 1 1 1096 635791
2 Block Ready 275576 900265 3/1/2019 1 2 1096 635791
3 Block Ready 275576 900265 3/1/2019 1 3 1096 635791
4 Block Ready 275576 900265 3/1/2019 1 4 1096 635791
5 Block Ready 275654 900265 3/1/2019 1 1 1096 635791
6 Block Ready 275654 900265 3/1/2019 1 2 1096 635791
7 Block Ready 275654 900265 3/1/2019 1 3 1096 635791
8 Block Ready 275654 900265 3/1/2019 1 4 1096 635791
9 Sold 275654 900265 3/1/2019 2 5 1096 635791
10 Sold 275654 900265 3/1/2019 2 6 1096 635791
11 Sold 275654 900265 3/1/2019 2 7 1096 635791
12 Sold 275654 900265 3/1/2019 2 8 1096 635791
我想在不明确排除 QuoteID = ‘275576’ 的情况下删除第 1 行,因为这可能发生在许多其他 Quotes 上。
【问题讨论】:
请将 SQL 和数据作为格式化文本包含在您的问题中,因为这将有助于我们弄清楚发生了什么。 以文本(而非图像)的形式发布示例数据和预期结果,并更好地解释您想要应用的条件。 【参考方案1】:我认为您想根据要区分的列计算行号,请记住,要过滤 ROW_NUMBER,您需要将其包装在子查询或 CTE (SQL Row_Number() function in Where Clause) 中:
ROW_NUMBER() OVER (PARTITION BY QuoteStatus, Iteration ORDER BY QuoteID) as seqnum
然后您可以过滤此值。
【讨论】:
嗨@Gordon Linoff 愚蠢的问题在这里......我可以使用'seqnum'过滤掉同一查询中的结果吗?谢谢。 @i.am.satishv 。 . .您需要一个子查询或 CTE。 感谢您的帮助,我现在将关闭此帖子。看起来使用 ROW_NUMBER() 是可行的方法,但是如果不使用 Quoteid 作为过滤器,我无法排除 Quote Status = 'Block Ready' 和 QuoteID = '275576' 的 4 条记录。以上是关于当特定的列组合确定其重复性时,如何排除sql中的数据?的主要内容,如果未能解决你的问题,请参考以下文章
当 SQL Server 表中的列“createdDate”从现在起经过 90 天后,如何更新其具有数百万行的列?我们可以使用触发器吗?