查询多列时如何在1键列上选择DISTINCT

时间:2014-03-27 19:08:06

标签: sql-server

我在SQL Server 2008 R2中工作。我有一张桌子,其中1"记录"由于其中一个字段具有不同的值,实际上是几个记录。这个表本身有很多字段。给定"记录的所有字段"将具有相同的值,除了具有各种值的一个字段。我想查询所有记录并返回所有字段,但我只想要每个"记录"的1个实例(第一个)。例如,我的表格如下:

Field 1    Field 2       Field 3
value a    value x       value 1
value a    value x       value 2
value a    value x       value 3
value b    value y       value 20
value b    value y       value 21
value b    value y       value 22

我希望我的查询返回类似的内容:

Field 1    Field 2       Field 3
value a    value x       value 1
value b    value y       value 20

所以,我的Field 1是我的关键。通常,我会做一个SELECT DISTINCT。但是,由于我希望在查询中返回所有字段,因此DISTINCT将应用于SELECT中的所有字段,这意味着将返回所有记录,而不是每个键只返回1。实现这个目标的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

SELECT t.field1,t.field2,t.field3 FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION by Field1 ORDER BY Field1) AS RowNumber
FROM mytable
) t
WHERE t.RowNumber = 1

此方法仅查看第一列的不同方面。 SQL中无法保证顺序。您可以设置如何定义" First Row"使用" ORDER BY"以上代码的部分。

答案 1 :(得分:1)

假设您想要字段3中的最小值:

SELECT [Field 1], [Field 2], MIN([Field 3])
FROM YourTable
GROUP BY [Field 1], [Field 2]

答案 2 :(得分:1)

您希望按字段1和字段分组。第2场,然后取第3场的最小值。

select      [Field 1],
            [Field 2],
            MIN([Field 3]) as [Field 3]
from        [SomeTable]
group by    [Field 1], [Field 2]

答案 3 :(得分:0)

您可以Group By使用field 1field 2;