欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

sql动态列转行,该怎么解决

更新时间: 2014-01-05 02:14:50 责任编辑: Author_N1

 

Sql动态列转行
数据表A,表示每个学生的课程表

student_id      Course
1                语文
1                数学
2                英语
3                语文
3                英语


现在要查询显示成这样(学生有该课程的就为Y,否则为N)

student_id    语文     数学    英语
1              Y         Y       N
2              N         N       Y
3              Y         N       Y

上面的课程只有3个,事实上课程是不固定的,会增加的.
--参考方法--
a  11g以上版本用pivot
b  动态拼接sql
c  自己写自定义函数
--参考方法--
只能用存储过程处理了
----------------新建测试表
CREATE TABLE tmp_user_2(student_id NUMBER,Course VARCHAR2(100));

----------------第一部分测试数据
INSERT INTO tmp_user_2 VALUES(1, '语文'); 
INSERT INTO tmp_user_2 VALUES(1, '数学');
INSERT INTO tmp_user_2 VALUES(2, '英语');
INSERT INTO tmp_user_2 VALUES(3, '语文');
INSERT INTO tmp_user_2 VALUES(3, '英语');
COMMIT;

----------------行转动态列存储过程
CREATE OR REPLACE PROCEDURE P_tmp_user_2 IS
  V_SQL VARCHAR2(2000);
  CURSOR CURSOR_1 IS
    SELECT DISTINCT T.Course FROM tmp_user_2 T ORDER BY Course;

BEGIN
  V_SQL := 'SELECT student_id';
  FOR V_XCLCK IN CURSOR_1 LOOP
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:14:50
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7497/
本文WWW.DOC100.NET DOC100.NET版权所有。