SQL选择: Get rows where two or more columns are the same

标签 sql sql-server t-sql

我已经有一段时间没有使用 SQL 查询了,看似简单的查询却让我发疯。我有一个交易表,我试图根据各种标准从中选择重复。相关表结构如下:

[Transaction]
* ID          int
  Transacted  datetime
  Name        nvarchar(50)
  Description nvarchar(4000)
  size        bigint

从此表中,我需要找到名称/大小的重复项,并报告名称具有相同大小交易的所有记录,即使日期和描述不同。我可以仅使用以下名称来获取计数:

SELECT   Name, COUNT(Name) AS Count
FROM     Transaction
GROUP BY Name

然后我可以对其进行内部联接以获取其余数据:

SELECT data.ID, data.Transacted, data.Name, data.Description, data.Size, counts.Count
FROM (SELECT  Name, COUNT(Name) AS Count
      FROM  Transaction
      GROUP BY Name) AS counts 
INNER JOIN Transaction AS data ON counts.Name = data.Name
WHERE     (counts.Count > 1)
ORDER BY  data.Name, data.Transacted

但显然这只是给我提供名称重复的交易,而不是名称和大小都重复的交易。

我正在寻求帮助来完成这一部分,以便我报告所有数据,其中各行显示相同名称和相同大小的重复。我可以轻松地将两列中的数据连接成一个结果并与其进行比较,但我不确定这是最佳方法。

提前致谢。

最佳答案

问题中的代码表明您还需要其他列。要返回具有重复名称、大小的所有行,您可以使用

WITH CTE
     AS (SELECT *,
                COUNT(*) OVER (PARTITION BY Name, size) AS Cnt
         FROM   [Transaction])
SELECT ID,
       Transacted,
       Name,
       Description,
       size
FROM   CTE
WHERE  Cnt > 1 

关于SQL选择: Get rows where two or more columns are the same,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14429561/

相关文章:

mysql - SQL Where SUM() 在两个值之间

sql - 使用 SELECT * FROM X WHERE Y is not NULL 替换查询

sql-server - 如何检索 SQL Server 检查约束依赖列

sql-server - SQL Server - 变量不返回结果的Where Like语句

t-sql - 在 Azure 中检索用户创建的角色和用户信息

sql - 比较记录集中的 2 个连续行

mysql - 压缩多个嵌套的 select 语句

sql - 归档超过 1,000,000,000 行的巨大表的最佳实践

c++ - 在qt中执行自己的sql函数

.net - 在 SQL 或 .NET 中比较复杂字符串的最佳方法