【问题标题】:Get Duplicate records from a table on combination of Multiple Columns and show 'Y' for Duplicate and 'N' for Single records从多列组合的表中获取重复记录,并为重复显示“Y”,为单个记录显示“N”
【发布时间】:2021-01-23 15:57:03
【问题描述】:

我需要从多列组合的表中查找重复记录,并在 gridView 中显示重复记录以及其他列的“Y”。

说明:

Table A:
ID, Col1 ,    Col2,    Col3 , Col4,   Col5,    Col6,   Col7,   Col8,  Col9 
1,  AVal1,    AVal2,   AVal3, AVal4,   AVal5,  AVal6,  AVal7,  AVal8, AVal9
2,  AVal10,   AVal11,  AVal3, AVal4,   AVal5,  AVal6,  AVal12,  AVal13, AVal14
3,  AVal15,   AVal15,  AVal3, AVal4,   AVal5,  AVal6,  AVal16,  AVal17, AVal18

Table B
ID, Col1, Col2, Col3

我需要从表 A 中识别出重复记录(Col3、Col4、Col5、Col6)的组合

当我从表 A 中选择记录时,我应该得到 Duplicate 'N' for RowID 1 和 'Y' for RowID 2 & 3。

Select A.Col1,A.Col3, A.Col4, A.Col6, 'Y / N' AS [Duplicate], B.Col2
FROM A 
LEFT JOIN B 
    ON A.ID = B.ID

我尝试使用 GroupBy 和 Partition,但我还有其他列要选择,但不能在 GroupBy 子句中使用。

提前致谢 :)

【问题讨论】:

  • 你为什么使用NOLOCK?您确实了解使用此类查询提示的(重要)含义,对吗?
  • 另外,“记录”是什么意思? SQL Server 没有“记录”,它有行和列,单行中的单列有值。 “记录”是否意味着整行都相同?也许当一列与另一列具有相同的值(在每一行中)?
  • @Larnu : Record 表示表格中的一行
  • 另外,SQL Server 2008 已经在一年多前结束生命;如果您还没有的话,您真的应该尽快查看升级路径。 (从您的问题中删除 NOLOCK 也不能回答 为什么 您首先要使用它的问题)。
  • 这些行都不相同,因此没有重复。至少,它们对于IDCol1Col2Col7Col8Col9 都有不同的值。

标签: sql sql-server database sql-server-2008 duplicates


【解决方案1】:

我想你想要row_number():

select t.*,
       (case when row_number() over (partition by col3, col4, col5, col6 order by col1) = 1
             then 'N' else 'Y'
        end) as flag
from t;

【讨论】:

  • 这个解决方案简单而高效——就像一个魅力。谢谢
猜你喜欢
  • 2018-12-27
  • 2020-07-14
  • 2012-12-25
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
相关资源
最近更新 更多