2

従来の ASP と SQL で記述したオンライン ストア Web アプリケーションがあり、アイテムの注文結果についてサポートが必要です。

次のような「アイテム」という名前のテーブルがあります。

ITEM_NUMBER | DESCRIPTION | PRICE | NEXT_ITEM |
-----------------------------------------------
0001          Item 0001       1.5
-----------------------------------------------
0002          Item 0002       2
-----------------------------------------------
0003          Item 0003       1
-----------------------------------------------
0004          Item 0004       3
-----------------------------------------------
0005          Item 0005       7        0030
-----------------------------------------------
.
.
.
.
-----------------------------------------------
0030          Item 0030       3

私がしたいのは、NEXT_ITEM値がnullであるため、アイテム番号ごとにITEM_NUMBERごとに注文を維持することですが、アイテム0005の後にアイテム0030を表示することです。これは非常に類似したアイテムであり、アイテム番号はアイテム0005の行に記載されていますその後、スキップした場所から結果をロードし続けるために、レコードセット ポインタを戻す必要があります (項目 0006)。

レコードセットが 0030 になると、このレコードは既にユーザーに表示されており、以前にロードされているため、このレコードをスキップします。

4

2 に答える 2

1

これは仕事をしているように見えます-テーブルをそれ自体に結合し、通常のソートキーに優先してその自己結合を使用する必要があります:

declare @T table (ItemNo char(4) not null,Description varchar(20) not null,RelatedItemNo char(4) null)
insert into @T (ItemNo,Description,RelatedItemNo) values
('0001','0001',null),
('0002','0002',null),
('0003','0003',null),
('0004','0004',null),
('0005','0005','0009'),
('0006','0006',null),
('0007','0007',null),
('0008','0008',null),
('0009','0009',null),
('0010','0010',null)

select
    t.*
from
    @T t
        left join
    @T t_par
        on
            t.ItemNo = t_par.RelatedItemNo
order by
    COALESCE(t_par.ItemNo,t.ItemNo),
    t_par.RelatedItemNo

結果:

ItemNo Description          RelatedItemNo
------ -------------------- -------------
0001   0001                 NULL
0002   0002                 NULL
0003   0003                 NULL
0004   0004                 NULL
0005   0005                 0009
0009   0009                 NULL
0006   0006                 NULL
0007   0007                 NULL
0008   0008                 NULL
0010   0010                 NULL

RelatedItemNoこれは、アイテムが他の複数の行のとして表示される状況をうまく処理しません。そのような各場所に表示されます。しかし、繰り返しますが、あなたは質問でこの可能性について言及しておらず、それに対処するための特定のルールも言及していないため、これに対する修正は追加しません。

また、これを複数のレベルに拡張する必要がある場合、上記はまだ不十分であり、CTE を導入することで修正できます。しかし、繰り返しになりますが、あなたの質問ではそのような状況について言及していません。

于 2013-01-21T15:24:37.153 に答える
0

SQL Server のバージョンによってはhierarchyid、テーブルに列を追加して並べ替えることができます。

または、再帰的な CTE を記述して結果を並べることもできます。

于 2013-01-21T15:00:40.460 に答える