我正在使用SQL Server 2008.我有两个表,Table1和Table2如下。
表1
ID Col1 Col2 Col3
-- ---- ---- ----
1 X Y Z
表2
ID Col1 Col2 Col3
-- ---- ---- ----
1 1 2 3
我想编写一个存储过程,返回如下所示的结果。并且必须在不使用游标的情况下实现此结果。
结果
Key Value
--- -----
X 1
Y 2
Z 3
Edited:
I required one result set.
Both IDs are parameter of my Store Procedure.
答案 0 :(得分:5)
由于您使用的是SQL Server 2008,因此可以使用CROSS APPLY和VALUES来取消数据的转移。您可以先在id列上加入两个表格,然后将其展开到key
/ value
列:
select [key], value
from
(
select t1.col1, t2.col1 t2_col1,
t1.col2, t2.col2 t2_col2,
t1.col3, t2.col3 t2_col3
from table1 t1
inner join table2 t2
on t1.id = t2.id
) src
cross apply
(
values
(col1, t2_col1),
(col2, t2_col2),
(col3, t2_col3)
) c ([key], value);
答案 1 :(得分:1)
select t1.col1 as [Key]
, t2.col1 as Value
from dbo.Table1 t1
join dbo.Table2 t2
on t1.id = t2.id
union all
select t1.col2
, t2.col2
from dbo.Table1 t1
join dbo.Table2 t2
on t1.id = t2.id
union all
select t1.col3
, t2.col3
from dbo.Table1 t1
join dbo.Table2 t2
on t1.id = t2.id