2015-12-14 81 views
2

我正在从事的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,然后主语句将根据该键获取相应值的值。 表2将始终返回a-f,我会提前知道VAR1和VAR2。

+0

您可以使用'CASE'表达式来做到这一点。 –

+0

@GiorgosBetsos我需要为表1中的每一列写一个单独的子句吗? –

+1

是的,没有其他的方法(与静态SQL)。除非你想使用动态SQL。 –

回答

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

+0

我想这正是我的想法。 –