5

これに似た、STYLE 順に並べられた SQL 結果セットがあります。

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 行と言うことSTYLEですC(したがって、実際には 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次の行が同じスタイルであるかどうかに基づいて、数値を動的に追加する何らかのウィンドウ関数を考えていました。

何か案は?

4

2 に答える 2

10

これが欲しいようです:

select top 3 with ties *
from yourtable
order by style

デモで SQL Fiddle を参照してください

編集#1:追加データで更新されたSQLフィドルを参照してください

結果:

| STYLE | CUSTOMER | SIZE | COLOUR |
------------------------------------
|     A |     DWTG |    S |   BLUE |
|     B |     DWTG |    S |    RED |
|     C |     DWTG |    S |  GREEN |
|     C |     DWTG |    M |  GREEN |
于 2012-12-20T22:12:41.070 に答える
6

DENSE_RANK() を使用して、次のようなことを試してください。

WITH    cte
          AS ( SELECT   STYLE,
                        CUSTOMER,
                        DENSE_RANK() OVER ( ORDER BY STYLE ) AS d_rank
               FROM     dbo.x
             )
    SELECT  STYLE,
            CUSTOMER
    FROM    cte
    WHERE   d_rank <= 3;

http://msdn.microsoft.com/en-us/library/ms189798.aspx

于 2012-12-20T22:17:06.680 に答える