2012-07-30 82 views
0

我的表看起来像查询从表中多行从同一个表

ID AB_ID VALUES 
1  2  20 
2  2  10 
3  2  30 
4  2  60 

返回一行,我想创建一个查询返回

AB_ID  value1  value2  value3  value4 
    2  20   10  30   60  

谢谢你的帮助。

+0

什么数据库引擎?你是否每AB_ID有4行? value1到value4是否与每个AB_ID的ID列升序相对应? – gbn 2012-07-30 15:02:45

+0

枢轴条款是你需要的 – 2012-07-30 15:04:15

+0

@ElVieejo:也许不是..我们没有足够的信息 – gbn 2012-07-30 15:04:42

回答

0

既然你知道有将要每AB_ID四行,你应该能够沿着这些路线做一个支点

SELECT ab_id, 
     MAX(CASE WHEN rn = 1 THEN values ELSE NULL END) value1, 
     MAX(CASE WHEN rn = 2 THEN values ELSE NULL END) value2, 
     MAX(CASE WHEN rn = 3 THEN values ELSE NULL END) value3, 
     MAX(CASE WHEN rn = 4 THEN values ELSE NULL END) value4 
    FROM (SELECT ab_id, 
       values, 
       rank() over (partition by ab_id 
           order by id) rn 
      FROM your_table) 
GROUP BY ab_id 

如果您使用的是Oracle 11.2,你应该能够使用PIVOT关键字也是如此。我不确定你使用的是什么版本的Oracle。