如何 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 数据
我工作的 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
.