SQL Server中按empid生成1、2重复序列的实现问题
为每个empid生成两行带序列的记录
ROW_NUMBER()函数仅能对现有行进行编号,无法生成新行,所以要实现每个empid对应两行记录的需求,最直接的方法是用**交叉连接(CROSS JOIN)**搭配一个包含1、2的序列集合。
具体实现代码
假设你的源表名为Employees,包含empid和deptid列,SQL语句如下:
SELECT e.empid, e.deptid, s.sequence FROM Employees e CROSS JOIN (VALUES (1), (2)) AS s(sequence) ORDER BY e.empid, s.sequence;
原理说明
(VALUES (1), (2)) AS s(sequence)生成一个临时序列表,包含两个固定值:1和2。CROSS JOIN会将源表中的每一行与临时序列表的每一行进行组合,这样每个empid对应的原记录会被复制两次,分别对应sequence为1和2的行。
示例验证
如果源表输入是:
| empid | deptid |
|---|---|
| 1 | 1 |
执行上述SQL后,输出结果为:
| empid | deptid | sequence |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
完全符合需求效果。
内容的提问来源于stack exchange,提问作者Sathish Kumar
相关产品推荐
相关产品推荐

