2012-12-20 159 views
5

我有一个SQL结果集,看起来与此类似,并下令风格:选择顶层n行

STYLE  |  CUSTOMER  |  SIZE  |  COLOUR  | 
----------------------------------------------------------------- 
A    DWTG    S    BLUE 
B    DWTG    S    RED 
C    DWTG    S    GREEN 
C    DWTG    M    GREEN 
D    DWTG    S    ORANGE 
D    DWTG    M    ORANGE 
D    DWTG    L    ORANGE 

现在,我需要拆分这个结果集,并获得第1000行。没问题,我可以用TOP 1000

我的问题是,与上面的例子,如果我想,说的前3排,因为STYLEC重复下一行,我需要包括这个问题,以及(所以我实际上有4行)。

例以上,我想结果集的样子:

STYLE  |  CUSTOMER  |  SIZE  |  COLOUR  | 
----------------------------------------------------------------- 
A    DWTG    S    BLUE 
B    DWTG    S    RED 
C    DWTG    S    GREEN 
C    DWTG    M    GREEN 

这已经发生了,因为我们将数据导入到ERP有一个文件大小的限制,所以我需要拆分我的结果集到更小的文件中,但我需要保持相同的记录(STYLE中的相同值)。

我正在考虑某种窗口函数,根据下一行是否具有相同样式,动态地向TOP n添加一个数字。

任何想法?

+0

你能告诉你想要的输出是什么样? – JohnFx

回答

10

这听起来像你想的:

select top 3 with ties * 
from yourtable 
order by style 

SQL Fiddle with Demo

编辑#1:看到更新sql fiddle with your additional data

结果:

| STYLE | CUSTOMER | SIZE | COLOUR | 
------------------------------------ 
|  A |  DWTG | S | BLUE | 
|  B |  DWTG | S | RED | 
|  C |  DWTG | S | GREEN | 
|  C |  DWTG | M | GREEN | 
+0

只需阅读一下,但看起来像这样可能会奏效。但是我的输出大约有20列,我怎么用'with ties'来指定我希望它保持在一起的那一列? – Lock

+0

@锁它可以使用您订购的任何列来将行连接在一起,在这种情况下只是'style'。 –

+1

@Lock你可以在你的问题中添加几个其他列,以便没有人追逐移动目标? –