2015-04-02 109 views
-1

我有一个查询让我挠了一下头。如何选择没有重复的行

我有一个交易表。它包括类型,日期,时间,数量等。大约有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 & 3表示相同的交易。所以我的select语句需要返回第1,3,4行(或1,2,4)。

注:2型总有1型,1型并不总是有型2.

请帮我这句话好!

+0

添加更多的列请张贴样本数据和预期的结果,以便更好地解释你正在尝试做的。尽管我怀疑你可以用CASE语句来做你想做的事情,无论是在选择列表中还是在GROUP BY中。 – 2015-04-02 19:23:24

+0

有没有办法添加表格? – Paul 2015-04-02 19:42:47

+0

您可以将任何格式的文本复制并粘贴到您的问题中。您可以使用{}代码视图按钮保留确切的格式,而不必忽略所有换行符。 – 2015-04-02 19:47:05

回答

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)