我有一个包含许多整数的表。查询该表,结果最终变为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
使用自我加入,但我无法让它工作。有没有人对我如何解决这个问题有任何建议?
答案 0 :(得分:3)
这会有帮助吗?
SELECT
MIN(ItemID)
,MAX(ItemID)
FROM
(
SELECT ItemID, RANK() OVER (ORDER BY ItemID) R FROM Items
) Tmp
GROUP BY
ItemID - R
答案 1 :(得分:0)
我认为这应该可以解决问题:1)按itemID排序2)使用OVER ... PARTITION获取行号3)在递归公用表表达式中使用它将数字连接到其他所有其他锚点+行号等于ItemID,从而在外部查询中找到锚点所有序列号4),然后使用MIN和MAX来获取范围。