我现在有一数据表TEST,有以下段:
ID NUMBER(10) //主键
EXAM_ID NUMBER(10) //检查ID,不同的检查有不同的ID
EXAM_RESULT VCHAR2(10) //检查结果
EXAM_DATE DATE //检查时间比如有这样的数据:
1 001 12.1 2008-1-1
2 002 13 2008-1-1
3 003 10 2008-1-1
4 001 9 2008-1-2
5 002 9.8 2008-1-2
6 003 8 2008-1-2
...我想要查询出一些记录,每一条记录包含检查日期里每一项检查的检查结果,如:
1 2008-1-1 12.1 13 10
2 2008-1-2 9 9.8 8
...我用的是这样的查询语句:
select A.EXAM_DATE,A.EXAM_RESULT,B.EXAM_RESULT,C.EXAM_RESULT,
from TEST A
JOIN TEST B
JOIN TEST C
ON C.EXAM_ID=B.EXAM_ID
ON A.EXAM_ID=B.EXAM_ID
WHERE A.ID>B.ID
AND B.ID>C.ID
AND A.EXAM_DATE=B.EXAM_DATE
AND A.EXAM_DATE=C.EXAM_DATE但是这样也存在不少问题。
当我的检查内容ID很多的时候,比如说有20项检要同时显示在一条记录里,那我要JOIN 20个表,那不是有好多好多条件要写。有没有朋友有简单一点的语句可以相赠?
谢谢先。。
速度不能太慢,因为我的TEST表里至少有10万条记录,每条记录要同时显示10多项检查结果。
期待高手,分不多,20分,抛钻引玉
ID NUMBER(10) //主键
EXAM_ID NUMBER(10) //检查ID,不同的检查有不同的ID
EXAM_RESULT VCHAR2(10) //检查结果
EXAM_DATE DATE //检查时间比如有这样的数据:
1 001 12.1 2008-1-1
2 002 13 2008-1-1
3 003 10 2008-1-1
4 001 9 2008-1-2
5 002 9.8 2008-1-2
6 003 8 2008-1-2
...我想要查询出一些记录,每一条记录包含检查日期里每一项检查的检查结果,如:
1 2008-1-1 12.1 13 10
2 2008-1-2 9 9.8 8
...我用的是这样的查询语句:
select A.EXAM_DATE,A.EXAM_RESULT,B.EXAM_RESULT,C.EXAM_RESULT,
from TEST A
JOIN TEST B
JOIN TEST C
ON C.EXAM_ID=B.EXAM_ID
ON A.EXAM_ID=B.EXAM_ID
WHERE A.ID>B.ID
AND B.ID>C.ID
AND A.EXAM_DATE=B.EXAM_DATE
AND A.EXAM_DATE=C.EXAM_DATE但是这样也存在不少问题。
当我的检查内容ID很多的时候,比如说有20项检要同时显示在一条记录里,那我要JOIN 20个表,那不是有好多好多条件要写。有没有朋友有简单一点的语句可以相赠?
谢谢先。。
速度不能太慢,因为我的TEST表里至少有10万条记录,每条记录要同时显示10多项检查结果。
期待高手,分不多,20分,抛钻引玉
解决方案 »
- oracle 10g 导入DMP 出错了同,大哥们快帮帮我
- 关于start with 的问题
- 哪位大虾帮我看看数据库的参数设置是否合理?
- imp出错
- 求一SQL语句
- 好方法取AAA_XXXXXXX_CDEF_BBBBB 第一个"_"和第二个"_"之间的串?
- 如何让一个新用户只能修改某一个表?
- *************一个很简单的问题?*************
- 数据库中用什么类型存储文件最好? 如何上传、下载文件? 急!!! 在线等待,下午揭帖
- 要参加测试IBM新出UNIX操作系统AIX 5L,各位高手帮忙出点主义
- 存储过程如何执行select动态表名得到变量,请指教
- 请问能够建立这样一个自定义类型吗?
MAX(DECODE(EXAM_ID,'001',EXAM_RESULT,'0')) AS 001,
MAX(DECODE(EXAM_ID,'002',EXAM_RESULT,'0')) AS 002,
...
MAX(DECODE(EXAM_ID,'00n',EXAM_RESULT,'0')) AS 00n
FROM TEST WHRER ... GROUP BY EXAM_DATE;
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)