在 SQL 中使用行编号复制结果行
在许多数据库操作中,经常需要扩展结果行并为其分配唯一编号他们。当处理具有不同行数的数据时,此技术特别有用。例如,考虑以下数据:
value | count ------+------ foo | 1 bar | 3 baz | 2
要将此数据转换为重复计数大于 1 的行并为每行分配一个索引的格式,可以采取多种方法。
使用数字表
常见的解决方案是使用数字表的联接操作。该表包含一系列数字,可用于生成所需的索引。
SELECT value, count, number FROM table JOIN Numbers ON table.count >= Numbers.number
此方法为所有主要数据库生成所需的输出,包括 Oracle、SQL Server、MySQL 和 PostgreSQL。
示例实现 (SQL Server)
WITH N AS (SELECT ROW_NUMBER() OVER (ORDER BY object_id) AS number FROM sys.objects) SELECT value, count, number FROM table JOIN N ON table.count >= N.number;
此修改后的查询使用公用表名为“N”的表达式(CTE)来创建数字表并实现所需的输出。
特定于数据库的注意事项
尽管上述解决方案是跨数据库兼容的,可能有更多特定于数据库的方法可以提供额外的优化或性能优势。建议针对特定数据库环境探索此类选项。
以上是如何复制 SQL 结果行并根据计数列分配行号?的详细内容。更多信息请关注PHP中文网其他相关文章!