使用字段中存储的列的名称来检索来自不同表的数据

时间:2012-09-21 15:58:34

标签: sql sql-server unpivot

我想知道是否存在在SQL-Server 2008中完成以下内容的代码?

表1:

id    column name
-------------------
1     col1
2     col2
3     col3
4     col2

表2:

col1    col2    col3
--------------------
a       b       c

结果表:

id    data
--------------------
1     a
2     b
3     c
4     b

先谢谢,我真的不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

您可以使用UNPIVOT table2来访问列中的数据:

select t1.id, t2.value
from table1 t1
left join 
(
  select value, col
  from table2
  unpivot
  (
    value
    for col in (col1, col2, col3)
  ) u
) t2
  on t1.name = t2.col

请参阅SQL Fiddle with Demo

或者您可以使用UNION ALL访问table2中的数据:

select t1.id, t2.value
from table1 t1
left join 
(
  select col1 value, 'col1' col
  from table2
  union all
  select col2 value, 'col2' col
  from table2
  union all
  select col3 value, 'col3' col
  from table2
) t2
  on t1.name = t2.col

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

如果没有列连接,我不知道你是怎么做到的:

Table1:
ID
ColumnName

Table2:
Table1ID
Letter


Select table1.id, table2.Letter 
from table1 
inner join table2 on table1.ID = table2.Table1ID

答案 2 :(得分:0)

您可以使用案例陈述和交叉联接:

select t1.id,
       (case when t1.columnname = 'col1' then t2.col1
             when t1.columnname = 'col2' then t2.col2
             when t1.columnname = 'col3' then t2.col3
        end) as data
from table1 t1 cross join
     table2 t2