2

多くの整数を含むテーブルがあります。このテーブルがクエリされ、結果が xml に変換されます。たとえば、テーブルに次の項目が含まれているとします。

SELECT itemId FROM items WHERE enabled = true
1
2
3
5

何らかの処理を行った後の最終的な xml 出力は次のようになります。

 <item id="1" />
 <item id="2" />
 <item id="3" />
 <item id="5" />

xml はかなり大きくなり、多くの項目が実際には範囲になっています。私がやりたいことは、クエリを更新して範囲を結合することです (これらのアイテムの多くは「隣人」であるため、生成される xml はかなり小さくなります)。私は手順の結果を次のようにしようとしています:

1-3
5

最終的な XML は次のようになります (手順を変更するだけで、XML 処理は同じままでかまいません)。

<item id="1-3"/>
<item id="5"/>

私の最善のルートはどこで自己結合を使用することかもしれないと考えてtable1.itemId = table2.itemId - 1いましたが、それを機能させることができませんでした。これについてどうすればよいかについて誰か提案はありますか?

4

2 に答える 2

3

これは役に立ちますか?

SELECT
     MIN(ItemID)
    ,MAX(ItemID)
FROM
    (
        SELECT ItemID, RANK() OVER (ORDER BY ItemID) R FROM Items
    ) Tmp
GROUP BY
    ItemID - R
于 2011-06-16T19:49:00.643 に答える
0

私はこれがトリックを行うべきだと思います: 1) itemID による順序付け 2) OVER...PARTITION を使用して行番号を取得する 3) アンカー + 行番号が等しい他のすべての番号に番号を結合する再帰的な共通テーブル式で使用します。 4) 外側のクエリでアンカーによってグループ化し、MIN と MAX を使用して範囲を取得します。

于 2011-06-16T19:49:33.910 に答える