我一直在使用CTE来构建一些我需要的特殊格式的表,只要数据来自一个表或我可以加入,这一直很好用,但现在我遇到了一个情况我没有任何共同的领域可以加入。
这是理想的最终结果
+------+---------+
| p_id | value |
+------+---------+
| 1 | 1,55556 |
| 2 | 2,1212 |
| 3 | 2,6868 |
| 4 | 2,4545 |
| 5 | 1,55557 |
| 6 | 2,1212 |
| 7 | 2,6868 |
| 8 | 2,4545 |
+------+---------+
以下是一些示例表
CREATE TABLE Table1
([Emp_ID] varchar(10))
;
INSERT INTO Table1
([Emp_ID])
VALUES
(55556),
(55557)
;
CREATE TABLE Table2
([Type] Varchar(10), [Type_ID] varchar(10))
;
INSERT INTO Table2
([Type], [Type_ID])
VALUES
('Black', '1212'),
('Red', '6868'),
('Orange', '4545')
;
这是CTE使用单个表
GO
WITH cte as (
SELECT t1.[emp_id], C.Value
FROM table1 t1
outer apply (values
('1,' + t1.[emp_id])
) as C(Value)
)
SELECT
row_number() over(order by [emp_id], value) as p_id,
value
FROM cte
但我想要的是这样的......除非我这样做,否则我会用"多部分标识符" t1.emp_id"无法绑定"
GO
WITH cte as (
SELECT t1.[emp_id], C.Value
FROM table1 t1, table2 t2
outer apply (values
('1,' + t1.[emp_id]),
('2,' + t2.type_id)
) as C(Value)
)
SELECT
row_number() over(order by [emp_id], value) as p_id,
value
FROM cte
现在,我可以做我以前做过的事情,这是为每个值创建一个单独的列,除了这次我在table2中处理我需要插入的数百个值,这样就不再实用了。
提前感谢任何建议。
答案 0 :(得分:1)
以下是获得所需输出的方法。但我觉得我错过了这一点:
with cte as
(
select '2,'+type_id as value, emp_id
from table1 t1, table2 t2
union all
select '1,'+emp_id as value, emp_id
from table1
)
select value,
row_number() over(order by emp_id, value) as p_id
from cte