如何选择没有重复的行
问题描述:
我有一个查询让我挠了一下头。如何选择没有重复的行
我有一个交易表。它包括类型,日期,时间,数量等。大约有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.
请帮我这句话好!
答
您可以直接在列表中后,通过分区...
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)
添加更多的列请张贴样本数据和预期的结果,以便更好地解释你正在尝试做的。尽管我怀疑你可以用CASE语句来做你想做的事情,无论是在选择列表中还是在GROUP BY中。 – 2015-04-02 19:23:24
有没有办法添加表格? – Paul 2015-04-02 19:42:47
您可以将任何格式的文本复制并粘贴到您的问题中。您可以使用{}代码视图按钮保留确切的格式,而不必忽略所有换行符。 – 2015-04-02 19:47:05