2012-08-01 64 views
1

我有一个查询,返回下面的数据结构:的Oracle 10g:SQL合并行成单排

Course Math Science Computer Chemistry 
------ ---- ------- -------- --------- 
CI101  98 
CI101  87 
CI101    78 
CI101    102 
CI101      23 
CI101      56 
CI101      89 
CI101         45 

怎么能有它使用SQL的结构如下:

Course Math Science Computer Chemistry 
------ ---- ------- -------- --------- 
CI101  98  78  23   45 
CI101  87  102  56 
CI101      89 

这里SQL我想:

select course, 
    case 
    when subject = 'MATH' then 
     count 
    end as MATH, 
    case 
    when subject = 'SCIENCE' then 
     count 
    end as SCIENCE, 
    case 
    when subject = 'COMPUTER' then 
     count 
    end as COMPUTER, 
    case 
    when subject = 'CHEMISTRY' then 
     count 
    end as CHEMISTRY 
from t_course 
GROUP BY course, subject, count 

表结构:

Course Subject  Count 
------ -------  ----- 
CI101  Math   98 
.... 

提前致谢。

+0

什么是表结构? – Chip 2012-08-01 05:22:26

+0

我在问题中添加了表结构 – Ianthe 2012-08-01 05:28:00

+0

在您想要的结果集中,哪一行与另一行有区别?换句话说,为什么没有一个总数为185,科学= 180,计算机= 168,化学= 45的CI101单行? – Tebbe 2012-08-01 13:16:38

回答

1

试试这个:

由于我没有甲骨文和我没有看到这个问题的任何答案,我在SQL Server中做到了这一点。这可以很容易地转换成Oracle sql。

我认为,只有一部分需要转换为ROW_NUMBER()以上(以通过第[count])作为ROW_NUM这基本上以得到序列号对每个集

select CO.course,MA.count as 'MATH',SC.count as 'SCIENCE',CO.count as 'COMPUTER',CH.count as 'CHEMISTRY' from 
(select course,[count],ROW_NUMBER() over(order by [count]) as row_num from t_course where subject = 'MATH')MA full outer join 
(select course,[count],ROW_NUMBER() over(order by [count]) as row_num from t_course where subject = 'SCIENCE')SC on SC.row_num=MA.row_num full outer join 
(select course,[count],ROW_NUMBER() over(order by [count]) as row_num from t_course where subject = 'COMPUTER')CO on CO.row_num=SC.row_num full outer join 
(select course,[count],ROW_NUMBER() over(order by [count]) as row_num from t_course where subject = 'CHEMISTRY')CH on CO.row_num=CH.row_num 

请参阅SQL小提琴演示here