Oracle 10g:SQL将行合并为单行
我有一个返回以下数据结构的查询:Oracle 10g:SQL将行合并为单行,sql,oracle,Sql,Oracle,我有一个返回以下数据结构的查询: Course Math Science Computer Chemistry ------ ---- ------- -------- --------- CI101 98 CI101 87 CI101 78 CI101 102 CI101 23 CI101 56 CI101
Course Math Science Computer Chemistry
------ ---- ------- -------- ---------
CI101 98
CI101 87
CI101 78
CI101 102
CI101 23
CI101 56
CI101 89
CI101 45
Course Subject Count
------ ------- -----
CI101 Math 98
....
如何使用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 Math Science Computer Chemistry
------ ---- ------- -------- ---------
CI101 98
CI101 87
CI101 78
CI101 102
CI101 23
CI101 56
CI101 89
CI101 45
Course Subject Count
------ ------- -----
CI101 Math 98
....
谢谢。试试这个:
由于我没有Oracle,也没有看到这个问题的任何答案,所以我在sql server中完成了这项工作。这可以很容易地转换为Oracle sql
我认为,唯一需要转换的部分是ROW_NUMBER()over(order by[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 fiddle演示尝试以下操作:
由于我没有Oracle,也没有看到这个问题的任何答案,所以我在sql server中完成了这项工作。这可以很容易地转换为Oracle sql
我认为,唯一需要转换的部分是ROW_NUMBER()over(order by[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 fiddle演示我在问题中添加了表结构在您想要的结果集中,一行与另一行的区别是什么?换句话说,为什么没有一个CI101行的总数是数学=185,科学=180,计算机=168,化学=45?我在问题中添加了表格结构,在你想要的结果集中,一行和另一行的区别是什么?换句话说,为什么没有一行CI101,数学=185,科学=180,计算机=168,化学=45?