从两个连续行检索组合的查询

Jam*_*mes 3 sql t-sql sql-server sql-server-2008

我有一张桌子(time_period)

该表列出了几个时间段.

unique_id         type_id          sequence_number     billing_id   ...
    13              LJK1             1                  4356
    14              CNS3             2                  4356
    15              LJK1             3                  4356
    16              AOX4             4                  4356
    17              CNS3             1                  9827
    18              POD2             2                  9827
Run Code Online (Sandbox Code Playgroud)

这很棘手.我需要根据递增的序列号将所有type_id对从一个句点返回到下一个句点.例如,对于billing_id ='4356',我需要检索此结果集

-----------------------------------
LJK1       | CNS3                 -- type_ids pair from seq 1 to seq 2
CNS3       | LJK1                 -- type_ids pair from seq 2 to seq 3
LJK1       | AOX4                 -- type_ids pair from seq 3 to seq 4
Run Code Online (Sandbox Code Playgroud)

每个顺序的sequence_numbers的计数是可变的(高达10,低至2).我将为X个订单执行此操作.由此,我将进行进一步的处理,但获得这些配对本身令我感到困惑.我不需要结果集中的order_id或序列号.

这里需要递归CTE吗?游标也许?或者也许使用枢轴?我刚刚进行了头脑风暴和研究,但我对其中任何一个都没有太多经验,可以使用一些方向.

使用SQL Server 2008

Lam*_*mak 6

我认为你不需要递归CTE和游标.试试这个:

    SELECT A.type_id, B.type_id
    FROM time_period A
    LEFT JOIN time_period B
    ON A.billing_id = B.billing_id
    AND A.sequence_number = B.sequence_number - 1
    WHERE A.billing_id = 4356
Run Code Online (Sandbox Code Playgroud)