2016-04-22 113 views
0

我被卡住了,似乎找不到在Google上搜索答案的正確foo。SQL PIVOT查詢,基於值的列

我試圖做的是得到一個列的值,列是基於從另一列中的值:

我有兩個表:

pID | name | period 
0 abc  1 
1 def  2 
2 ghi  3 

pID | p1 | p2 | p3 
0 10 20 30 
1 40 50 60 
2 70 80 90 

我想要做一個查詢,顯示所有pID,他們的名字,期間和該期間有什麼價值。輸出應該是:

pID | name | period | NewVal 
0 abc  1  10 
1 def  2  50 
2 ghi  3  90 

我希望這是清楚我正在嘗試做什麼!

感謝* 1000

+0

您正在使用哪些DBMS? –

+0

表1中第3列(期間)的值是否固定,即是否知道它具有的值範圍?此外,表2中的列P1,P2,P3的數量也是固定的?或者這是根據期數動態生成的東西? –

回答

0

好吧,如果週期數是固定的,那麼你可以嘗試使用CASE

select t1.pID, t1.name, t1.period, 
CASE t1.period 
    WHEN 1 THEN t2.p1 
    WHEN 2 THEN t2.p2 
    WHEN 3 THEN t2.p3 
END as NewVal 
from t1 
inner join t2 on t2.pID = t1.pID; 
+0

謝謝!奇蹟般有效! – Olle

0

對於靜態定義的列您可以使用查詢類似如下:

SELECT t1.pID, t1.name, t1.period, 
     CASE t1.period 
      WHEN 1 THEN t2.p1 
      WHEN 2 THEN t2.p2 
      WHEN 3 THEN t2.p3 
     END AS NewVal 
FROM Table1 AS t1 
LEFT JOIN Table2 AS t2 ON t1.pID = t2.PID 

Demo here

+0

謝謝!奇蹟般有效! – Olle