2016-04-22 73 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