SQL选择:获取两列或更多列相同的行

时间:2013-01-20 21:29:49

标签: sql sql-server tsql

我在相当长一段时间内不必使用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

但显然这只是给我重复名称的交易 - 而不是重复名称和大小的地方。

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

将其更改为

SELECT   Name, Size, COUNT(Name) AS Count
FROM     Transaction
GROUP BY Name, Size Having COUNT(Name) > 1

答案 1 :(得分:1)

问题中的代码表明您还需要其他列。要返回包含重复Name, size的所有行,您可以使用

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