2013-06-19 2 views
1

Я использую SQL Server 2008. У меня есть две таблицы: Table1 и Table2, как показано ниже.SQL Server - строки таблицы для преобразования словаря данных

Table1

ID Col1 Col2 Col3 
-- ---- ---- ---- 
1  X  Y  Z 

Table2

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

Вы хотите вернуть 2 набора результатов? –

+0

Итак, что вы пробовали? – Ric

+0

Вам нужно будет объяснить * почему * вы получаете результат, прежде чем кто-либо сможет помочь. Являются ли идентификаторы, что делает их парами ключ-значение? – Ocelot20

ответ

5

Поскольку вы используете SQL Server 2008, вы можете использовать CROSS ОТНОСИТЬСЯ с ЗНАЧЕНИЯ для UNPIVOT данных. Вы можете сначала соединить две таблицы в столбце идентификатора, а затем UNPIVOT его в столбцы в 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

+0

Ты лучший, спасибо, что спасли мой день. –

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 
Смежные вопросы