SQL Server-表行到数据字典转换

时间:2013-06-19 12:55:03

标签: sql-server sql-server-2008 tsql

我正在使用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.

2 个答案:

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

请参阅SQL Fiddle with Demo

答案 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