1

我正在使用 SQL Server 2008。我有两个表,表 1 和表 2,如下所示。

表格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
编辑:
我需要一个结果集。
这两个 ID 都是我的存储过程的参数。
4

2 回答 2

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);

请参阅带有演示的 SQL Fiddle

于 2013-06-19T13:16:21.393 回答
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
于 2013-06-19T13:09:17.427 回答