仅具有相同值的特定列的第一行

use*_*516 1 sql t-sql sql-server

我有一个复杂的SQL查询,返回大约10000行.在我的查询中,我有一个OrderNr,很多行包含相同的OrderNr.现在我想只获取具有相同OrderNr的前1行.这仅适用于OrderNr列,不适用于任何其他列.我的意思是我在其他一些列中也有相同的值,但我想要所有的行.

在这里,我为您做了一些简单的例子

小提琴示例

目标是得到输出

1,Bruno,Dan
2,Johnson,Lars
4,Jordan, Derreck
5,Johnson,Peter
Run Code Online (Sandbox Code Playgroud)

这是Firstname和我的OrderNr相同

我该怎么做呢?

flo*_*flo 7

您可以按orderNumbers进行分区,并按ID对订单进行排名.仅选择rownumber为1的行时,您将获得预期的结果.

;WITH orders AS (
     SELECT *, 
        Row_Number() over (PARTITION BY OrderNr ORDER BY <ID>) rn       
    FROM T  
)
SELECT * FROM orders WHERE rn=1
Run Code Online (Sandbox Code Playgroud)

随你的小提琴:http://sqlfiddle.com/#!6/07780/11