如何 select 具有也需要 selected 的列名的值?

How to select a value with a column name that also needs selected?

我工作的 SQL Server 2005 table 真的很奇怪。这是一个简化的例子:

 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 来自不同 table 的列名,然后在此处获取值。所以它会像 "Select (select colName from table2 where id=VAR1) From table1 where key = VAR2" 所以table2会return或者a/b/c/d/e/f,然后主语句会根据key获取对应value的值。 Table2永远是returna-f,我会提前知道VAR1和VAR2。

您可以使用 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 操作将 table 数据从列转置到行,创建一个放置列名的额外字段。这样您就可以使用从 table2.

获得的列名称查询 table 数据

Demo here