select t1.dept_name,t1.user_name,t2.PATIENTCOUNT,t3.RECORDCOUNT from
 ((select b.dept_name, a.user_name, a.user_id from users a, 
dept_dict b where a.user_dept=b.dept_code) t1 inner join 
(select c.request_doctor_id, count(c.patient_id) as PATIENTCOUNT from mr_on_line
 c where c.request_date_time >= CONVERT(varchar(100),'2012-01-04',23)
and c.create_date_time <= CONVERT(varchar(100),'2013-01-08',23) 
group by c.request_doctor_id order by c.request_doctor_id) t2 
on t1.user_name=t2.doctor_in_charge inner join (select d.creator_id, 
count( distinct(d.creator_name)) AS RECORDCOUNT from 
mr_file_index d where d.create_date_time >= 
CONVERT(varchar(100),'2012-01-04',23) and d.create_date_time <=
 CONVERT(varchar(100),'2013-01-08',23) and d.file_flag in 
('1','2','3','9') GROUP BY d.creator_id order by d.creator_id) 
t3 on t1.user_id=t3.creator_id )sql

解决方案 »

  1.   

    试试,如果你不用top的话那没啥必要用order bySELECT  t1.dept_name ,
            t1.user_name ,
            t2.PATIENTCOUNT ,
            t3.RECORDCOUNT
    FROM    ( ( SELECT  b.dept_name ,
                        a.user_name ,
                        a.user_id
                FROM    users a ,
                        dept_dict b
                WHERE   a.user_dept = b.dept_code
              ) t1
              INNER JOIN ( SELECT   c.request_doctor_id ,
                                    COUNT(c.patient_id) AS PATIENTCOUNT
                           FROM     mr_on_line c
                           WHERE    c.request_date_time >= CONVERT(VARCHAR(100), '2012-01-04', 23)
                                    AND c.create_date_time <= CONVERT(VARCHAR(100), '2013-01-08', 23)
                           GROUP BY c.request_doctor_id
                           --ORDER BY c.request_doctor_id
                         ) t2 ON t1.user_name = t2.doctor_in_charge
              INNER JOIN ( SELECT   d.creator_id ,
                                    COUNT(DISTINCT ( d.creator_name )) AS RECORDCOUNT
                           FROM     mr_file_index d
                           WHERE    d.create_date_time >= CONVERT(VARCHAR(100), '2012-01-04', 23)
                                    AND d.create_date_time <= CONVERT(VARCHAR(100), '2013-01-08', 23)
                                    AND d.file_flag IN ( '1', '2', '3', '9' )
                           GROUP BY d.creator_id
                           --ORDER BY d.creator_id
                         ) t3 ON t1.user_id = t3.creator_id
            ) 
      

  2.   

    在括号内的查询称作为派生表,在派生表内指定order by语句必须用top
    不过你用派生表进行多表联接查询,联接的结果不会依据派生表内的数据顺序
    所以你排序了也没用,把order by子句删掉就行了