列到行的转换

时间:2015-07-06 09:32:42

标签: sql oracle

我有以下表名ETEST,col1和col2作为列名。

'value' => function($data, $row) {
    return CHtml::image(
        LessonController::getCamByClassId($data->Lesson_ID)[0]['Cam1'],
        "default image",
        array('width'=>195, 'height'=>110)
    );
}

值eid,name和可以重复,我想编写一个sql查询来显示如下数据:

  col1  col2
  ====    ==== 
  eid   101
  name  abc
  age   30
  eid   102
  name  xyz
  age   40

我尝试了类似下面的内容,但这并不适用于所有记录。

eid name  age
101 abc   30
102  xyz  40      

请注意,上表中col1的eid,名称和年龄可以有n个条目。

请帮忙。 问候, MKS

1 个答案:

答案 0 :(得分:1)

将列重写为行的最优雅方法是使用pivot语句。这样的代码看起来像这样:

select *
  from etest
  pivot
   ( min(col2)
     for col1 in ('eid', 'name', 'age')
   ) 

但我同意前一种说法:数据库设计是值得怀疑的。您永远无法确定一行中选择的eid是否属于另一行中的另一行nameage。所以提供的解决方案只有一半。