如何选择没有重复的行

时间:2015-04-02 19:04:50

标签: sql-server

我有一个问题让我刮了一下头脑。

我有一张交易表。它包括类型,日期,时间,数量等。大约有30种类型。不幸的是,类型1和2 可能成对出现,日期,时间和数量让我知道它们是否确实是重复的同一事务。

我可以获取除日期,时间和数量匹配的类型1和2之外的所有类型的所有行吗?

示例输入:

Row | Type | Qty | Date                   | Time |
1   |  1   | 12  | 2015-01-06 00:00:00.000| 74501|
2   |  1   | 15  | 2015-02-06 00:00:00.000| 91023|
3   |  2   | 15  | 2015-02-06 00:00:00.000| 91023|
4   |  3   | 7   | 2015-03-10 00:00:00.000|151256|

问题是第2行和第2行。 3代表相同的交易。所以我的select语句需要返回第1,3,4(或1,2,4)行。

注意:类型2始终具有类型1,类型1不总是具有类型2.

请帮助我改善这句话!

1 个答案:

答案 0 :(得分:1)

您可以在分区中的列表后面添加更多列...

WITH dups AS 
  (SELECT *, row_number() over 
    (PARTITION by Date, Time, Quantity ORDER BY type) 
   AS c1 FROM t2)

SELECT DISTINCT type, date, time, quantity 
FROM dups 
WHERE c1 > 1 
AND type not in (1,2)