我正在使用的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。
答案 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
。