Mysql 查找分配给多个唯一值的重复值

Mysql 查找分配给多个唯一值的重复值,mysql,sql,sql-server,sql-server-2008,Mysql,Sql,Sql Server,Sql Server 2008,我需要一个可以比较两列的查询(DBVersionKey,Desc19)。 逻辑-如果同一Desc19用于多个DBVersionKey,则仅返回这些结果。下面是数据范围(代码段) 数据样本 DBVersionKey Desc19 2491 W25170206H 2492 W25170212H 2493 W25170218H 2494 W25170224H 9129 40761KB18

我需要一个可以比较两列的查询(DBVersionKey,Desc19)。 逻辑-如果同一Desc19用于多个DBVersionKey,则仅返回这些结果。下面是数据范围(代码段)

数据样本

DBVersionKey    Desc19
2491            W25170206H
2492            W25170212H
2493            W25170218H
2494            W25170224H
9129            40761KB18X
9191            40761KB18X

EXPECTED RESULT
DBVersionKey    Desc19
9129            40761KB18X
9191            40761KB18X
*我曾尝试过分组、计数和许多其他理论解决方案

我不希望查询包含数据值的任何细节,因为受影响记录的数量可能很大

表名称-表A

select
    a.*
from
    Table_A as a
inner join
    (select Desc19
     from Table_A
     group by Desc19
     having count(*) > 1) as b
  on a.Desc19 = b.Desc19 ORDER BY Desc19
我建议使用带有行号分区的公共表表达式。这将创建Desc19的每个实例的计数(RN)

我现在无法测试查询,但请随时向我更新您的结果,我可以从中进行调整

编辑

如果DBVersionKey不是唯一值,我将尝试:

SELECT DISTINCT DBVersionKey, Desc19, COUNT(*)
FROM Table_A
Group by DBVersionKey, Desc19
如果效果更好,请告诉我

编辑2

再一次,我无法测试它。向第一个建议的查询中添加:

WITH CTE AS (SELECT DBVersionKey, Desc19, ROW_NUMBER()OVER(PARTITION BY Desc19 ORDER BY Desc19) RN 
FROM (SELECT DISTINCT DBVersionKey, Desc19 FROM Table_A GROUP BY DBVersionKey, Desc19)

SELECT * FROM CTE WHERE RN > 1

基于alybaba726编辑2的正确解决方案

WITH CTE AS (SELECT DBVersionKey, Desc19, ROW_NUMBER()OVER(PARTITION BY Desc19
    ORDER BY Desc19) RN FROM ix_spc_planogram GROUP BY DBVersionKey, Desc19)
SELECT * FROM CTE
    WHERE RN > 1
    ORDER BY RN

您的
GROUP BY
子句将同时需要PK和Desc19,我认为这不起作用。您的意思是DBVersionKey,Desc19?prem89,我已经尝试过了,但收到了以下错误:“ix_spc_planogram.DBVersionKey”列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。@prem89是,DBVersionKey(表的主键[PR])@Elliott_T-SQL检查此更新的查询。这行得通吗?
mysql
sql server
?alybaba这部分行得通,非常好。问题1-需要更改结果以防止显示重复的DBVersionKey和Desc19值(不同?)问题2-计数为3的计数具有3个不同值或2个不同值此编辑可能无法满足您的需要,请运行它并通知我!^与第二个查询相关,第一个查询没有提供正确的结果。因此,我希望能够测试这些结果。请参见编辑#2。括号似乎无效,因为第一个DBVersionKey Desc19显示为无效列名。最后一次选择应为、ID或带引号的ID
WITH CTE AS (SELECT DBVersionKey, Desc19, ROW_NUMBER()OVER(PARTITION BY Desc19
    ORDER BY Desc19) RN FROM ix_spc_planogram GROUP BY DBVersionKey, Desc19)
SELECT * FROM CTE
    WHERE RN > 1
    ORDER BY RN