从表中选择全部,其中2列是不同的

时间:2011-04-29 16:12:42

标签: sql sql-server

嗨我有一张交易表,我需要返回整个表格,但我需要标题和价格不同,因为有很多翻倍,我已经在下面举了一个示例场景

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

我不确定是否在这里使用distinct或group,任何建议都会受到赞赏

干杯

斯科特

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

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

4 个答案:

答案 0 :(得分:1)

这将为每个不同的(价格,标题)对任意选择一行

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

答案 1 :(得分:0)

您可以使用分组依据,但只返回标题和价格,必须忽略ID和来源

答案 2 :(得分:0)

您要求整个表格,但在您的示例输出中,您丢失了两个记录,从而失去了“Col Source”的值。

a b c b
b a a 1

Group By将帮助您编写非常简单的查询

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

答案 3 :(得分:0)

DISTINCTGROUP BY通常会生成相同的查询计划,因此两个查询结构的性能应该相同。应使用GROUP BY将聚合运算符应用于每个组。如果您只需删除重复项,请使用DISTINCT。如果您正在使用子查询,那么该查询的执行计划会有所不同,因此在这种情况下您需要先检查执行计划,然后再决定哪个更快。

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

SELECT ID, Title, Price, Source 
FROM table as t 
GROUP BY Title, Price