SQL Server技术问询:不使用UNION实现同效单列表生成方法
不用UNION生成指定结果集的SQL Server方法
当然可以!在SQL Server里,不用UNION也能轻松生成包含1、2、3的单列表,给你分享几个实用的方法:
VALUES子句(最简洁直观)
这是构造固定行集最直接的方式,语法简洁可读性强:SELECT value FROM (VALUES (1), (2), (3)) AS nums(value);这里
VALUES直接定义了三行数据,通过子查询给列命名后就能直接查询。递归CTE(适合生成连续数字范围)
如果需要的是连续的数字序列(比如从1到N),递归CTE非常灵活,哪怕后续要扩展到更多数字也很方便:WITH RecursiveNums AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM RecursiveNums WHERE num < 3 ) SELECT num FROM RecursiveNums;这个CTE从初始值1开始,每次递归把数字加1,直到达到3为止。
利用系统表+ROW_NUMBER()
SQL Server自带一些包含大量行数据的系统表,比如master.dbo.spt_values,结合ROW_NUMBER()函数可以快速生成序号:SELECT TOP 3 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS num FROM master.dbo.spt_values;ORDER BY (SELECT NULL)是为了避免不必要的排序开销,确保高效生成序号。
如果只是需要固定的几个值,优先选VALUES子句;要是需要生成一段连续数字范围,递归CTE或者系统表的方法会更实用。
内容的提问来源于stack exchange,提问作者Oliver Block
相关产品推荐
相关产品推荐

