数据表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