如何选择具有也需要选择的列名的值?

时间:2015-12-14 21:20:57

标签: sql sql-server sql-server-2005

我正在使用的SQL Server 2005表非常奇怪。这是一个简化的例子:

 TABLE 1:
       key | a | b | c | d | e | f 
    z   0   1   2   3   4   5   6
    y   1   8   9  10  11  12  13
    x  14  15  16  17  18  19  20 
    w  21  22  23  24  25  26  27



TABLE 2:

  id | Value
     1    a
     2    b
     3    c
     4    e
     5    f

我需要完成的是,在一个语句中,从另一个表中选择列名,然后在此处获取值。所以它会像"Select (select colName from table2 where id=VAR1) From table1 where key = VAR2" 因此table2将返回a / b / c / d / e / f,然后main语句将根据键获取相应值的值。 Table2将始终返回a-f,我将提前知道VAR1和VAR2。

1 个答案:

答案 0 :(得分:1)

您可以使用UNPIVOT

SELECT [key], val, col
FROM 
  (SELECT [key], a, b, c, d, e, f
   FROM table1
   WHERE [key] = @var2) AS src
UNPIVOT
   (val FOR col IN 
      (a, b, c, d, e, f)
)AS unpvt
WHERE col = (SELECT value FROM table2 WHERE id = @var1)

UNPIVOT操作将表数据从列转换为行,从而创建一个放置列名的额外字段。这样,您可以使用从table2

获取的列的名称来查询表数据

Demo here