我现在有一数据表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分,抛钻引玉

解决方案 »

  1.   

    我一般都是动态组合出类似下面的语句,然后到数据库执行SELECT EXAM_DATE,
    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;
      

  2.   

    declare @sql varchar(8000)
    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)