我在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。实现这个目标的最佳方法是什么?
答案 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 1
和field 2
;