2015-12-14 85 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

我想這正是我的想法。 –