2011-04-29 85 views
0

嗨,我有一个交易表,我需要返回整个表,但我需要的标题和价格是不同的,因为有很多双重上升,我已经把在示例场景下面从表中选择所有,其中2列是不同的

Col ID || Col Title || Col Price || Col Source 
a b c d 
a b c b 
b a a c 
b a a 1 

预期结果:

a b c d 
b a a c 

我不知道是否不被这里使用不同的或组,任何建议,将不胜感激

干杯

斯科特

=======================

看你的一些建议,我将不得不重新考虑这,谢谢你们

+2

你为什么想要abcd而不是abcb? – 2011-04-29 16:13:40

+2

你怎么知道哪个'Source'使用,因为在你的例子中每个都有2个? – 2011-04-29 16:15:14

+0

你不能有“整个表”和“标题和价格是不同的”*在同一时间* – gbn 2011-04-29 16:22:54

回答

1

这会随便挑行之一为每个不同的(价格,标题)对

;WITH myCTE AS 
(
    SELECT 
     *, 
     ROWNUMBER() OVER (PARTITION BY Price, Title ORDER BY Source) AS rn 
    FROM 
     MyTable 
) 
SELECT 
    * 
FROM 
    myCTE 
WHERE 
    rn = 1 
0

您可以通过使用组,但仅返回名称和价格,ID和源会必须被忽略

0

您正在询问整个表格,但在您的示例输出中,您已经丢失了两条记录,因此失去了“Col Source”的价值。

a b c b 
b a a 1 

集团通过将帮助你写的很简单的查询

select id, title, price, source from table group by title, price 
0

一个DISTINCTGROUP BY通常会产生相同的查询计划,所以性能应该是在两个查询构造相同。应该使用GROUP BY将聚合运算符应用于每个组。如果您只需删除重复项,请使用DISTINCT。如果您使用子查询执行计划对于该查询会有所不同,那么您需要在决定执行计划更快之前检查执行计划。

您应该将GROUP BY作为结果集中所需的整个列。但是,DISTINCT将仅返回特定列的唯一列表。

SELECT ID, Title, Price, Source 
FROM table as t 
GROUP BY Title, Price 
相关问题