2

我有一个使用经典 ASP 和 SQL 编写的在线商店 webapp,我需要有关商品订单结果的帮助。

我有一个名为“items”的表,如下所示:

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

我想要做的是按ITEM_NUMBER保持订单,因为它是按项目编号,因为NEXT_ITEM值为null,但在项目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 回答