在 SQL 中追加行和编号结果
如何扩展结果集以包含计数大于的每行的多行1、按顺序编号?例如,考虑下表中的值和计数:
Value | Count |
---|---|
foo | 1 |
bar | 3 |
baz | 2 |
我们所需的输出将是:
Value | Count | Index |
---|---|---|
foo | 1 | 1 |
bar | 3 | 1 |
bar | 3 | 2 |
bar | 3 | 3 |
baz | 2 | 1 |
baz | 2 | 2 |
要实现这种跨数据库兼容性,请考虑使用“Numbers” table:
SELECT value, count, number FROM table JOIN Numbers ON table.count >= Numbers.number
此解决方案生成一个数字序列,最多可达表中的最大计数。通过将原始表与 Numbers 表连接起来,我们可以有效地重复行并分配顺序索引。以下是使用 Microsoft SQL Server 的示例:
WITH Numbers AS ( SELECT ROW_NUMBER() OVER (ORDER BY number) AS number FROM ( SELECT 1 AS number UNION ALL SELECT number + 1 FROM Numbers WHERE number < (MAX(count) OVER ()) ) AS Outer ) SELECT value, count, number FROM table JOIN Numbers ON table.count >= Numbers.number
以上是如何在 SQL 中根据计数追加行并按顺序编号?的详细内容。更多信息请关注PHP中文网其他相关文章!