举个例子吧
学生表:A(学生编号id,姓名name)
学生特长表:B(学生编号id,特长名称),特长名称取值为:音乐,美术,体育现在想建一个视图v(编号id,姓名name,音乐,美术,体育),其中音乐,美术,体育是一个布尔字段,标识这个学生有没有这个特长。创建这个视图的语句该怎么写呢?谢谢各位!
学生表:A(学生编号id,姓名name)
学生特长表:B(学生编号id,特长名称),特长名称取值为:音乐,美术,体育现在想建一个视图v(编号id,姓名name,音乐,美术,体育),其中音乐,美术,体育是一个布尔字段,标识这个学生有没有这个特长。创建这个视图的语句该怎么写呢?谢谢各位!
解决方案 »
- linux下的Oracle安装包?
- oracle触发器编译完成后会为什么会自动还原?
- orcle中能够查询出一条记录的哪个会话或用户写入的吗?最好还能查到是哪个客户端操作的。谢谢。100相送
- 插入数据 出现缺少逗号 怎么回事啊
- asp.net连接oracle9i出错?
- 导出AWR报告错误
- 求sql写法,急!
- Oracle9i 的导出(exp)问题...急!!
- 高手请救!ORA-00439????
- 求解决方案:oracle in 内部有几千条记录,如何提高查询效率
- 因异地库session_per_user_limit限制,如何查本地正占用着的dblink
- 600万条海量记录啊!!!!!!大家有高性能的分页存储过程帮我解决分页吗??要不我要在公司过年了!!!!哇哇。。。。
SELECT
A.学生编号id,A.姓名name,
DECODE(BB.特长名称, '音乐', '1', '0') AS 音乐,
DECODE(BB.特长名称, '美术', '1', '0') AS 美术,
DECODE(BB.特长名称, '体育', '1', '0') AS 体育
FROM
A, (SELECT 学生编号id, 特长名称 FROM B GROUP BY 学生编号id, 特长名称) BB
WHERE
A.学生编号id = BB.学生编号id
/
表A: 表B:
学生编号id 姓名name 学生编号id,特长名称
10001 cld 10001 音乐
10002 abc 10001 美术
10002 体育而这条SQL 语句:(SELECT 学生编号id, 特长名称 FROM B GROUP BY 学生编号id, 特长名称);
显示的结果就是上述表B显示的结构,因此按照上述PL/SQL语句,会造成如下结构:
视图:C
学生编号id 姓名name 音乐 美术 体育
10001 cld 1 0 0
10001 cld 0 1 0
10002 abc 0 0 1因此不会符合题目的要求!
10001 cld 1 0 0
10001 cld 0 1 0
10002 abc 0 0 1
对于这个结果你可以 再求和:
CREATE OR REPLACE VIEW VIEW_NAME AS
select SELECT A.学生编号id,A.姓名name, sum(音乐),sum(美术),sum(体育) from
(
A.学生编号id,A.姓名name,
DECODE(BB.特长名称, '音乐', '1', '0') AS 音乐,
DECODE(BB.特长名称, '美术', '1', '0') AS 美术,
DECODE(BB.特长名称, '体育', '1', '0') AS 体育
FROM
A, (SELECT 学生编号id, 特长名称 FROM B GROUP BY 学生编号id, 特长名称) BB
WHERE
A.学生编号id = BB.学生编号id
)
group by A.学生编号id,A.姓名name
/