有没有在子SQL中用order by的方法呢?

[复制链接]
查看11 | 回复9 | 2014-1-10 06:00:15 | 显示全部楼层 |阅读模式
SELECT b.region_code REGION_CODE,

a.appno APPNO,

c.clientno CLIENTNO,

c.client_name CLIENT_NAME,

b.empno EMPNO,

b.emp_name EMP_NAME,

d.deptno DEPTNO,

d.dept_name DEPT_NAME,

f.empno APP_AGT_EMPNO,

f.emp_name APP_AGT_EMP_NAME,

g.deptno APP_AGT_DEPTNO,

g.dept_name APP_AGT_DEPT_NAME,

a.undwrt_date UNDWRT_DATE,

a.channel_mode CHANNEL_MODE,

a.business_src BUSINESS_SRC,

a.pol_sts POL_STS,

to_char(SYSDATE, 'mm/dd/yyyy') COMFIRM_DATE,

a.app_date APP_DATE,

(select max(i.proc_date)

from app_process_record i

where a.polno = i.polno

and proc_type in('0005')

and rownum <= 2

order by a.proc_date) PROC_DATE
FROM pol_info a,

staff_info_t b,

client_infoc,

dept_info_td,

app_agte,

staff_info_t f,

dept_info_tg
WHERE a.agentno = b.empno
AND a.applicant = c.clientno
AND b.deptno = d.deptno
AND a.appno = e.appno
AND a.appno = e.appno
AND e.agentno = f.empno
AND f.deptno = g.deptno
AND e.is_primary_agent = 'Y'
AND a.polno = #value#
这样为什么不行呢?子SQL结果只有一行啊!
回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层
这个和orderby 方法没关系吧你order by后的col 和max不是一个维度啊
回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层
把标量子查询改为如下即可, 反正是取最大的日期
(select max(i.proc_date)

from app_process_record i

where a.polno = i.polno

and proc_type in('0005')) PROC_DATE

回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层


版主正解
回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层
用分析函数吧
回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层
就算可以,你的order by写的也不对啊,不能和rownum放一层,套一层即可

回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层
dingjun123 发表于 2014-1-8 19:49
就算可以,你的order by写的也不对啊,不能和rownum放一层,套一层即可

12c 用fetch first rows放在一层
回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层
dingjun123 发表于 2014-1-8 19:49
就算可以,你的order by写的也不对啊,不能和rownum放一层,套一层即可

多套一层的话最外面的表就不可见了,这是受标量子查询的限制。
如果需求就是这么简单,3楼叮当的写法已经很好了。

回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层
SELECT * FROM ZY_DETAIL_CHARGE WHERE PATIENT_NO=(SELECT PATIENT_NO FROM ZY_PATIENT_INFORMATION WHERE BAH=98314 ORDER BY PATIENT_NO);
我测了,不让用。
但也想不明白条件加了后只有一个值的为什么要加ORDER BY
回复

使用道具 举报

千问 | 2014-1-10 06:00:15 | 显示全部楼层
本帖最后由 jeevan_yu 于 2014-1-10 17:35 编辑
with a as
(select '1' id,
'1-11Q' HM,
'72364' CDSC_ID,
'T-2-3' CDSC_NAME,
date '2012-12-25' CDSC_EFF_DT
from dual
union all
select '1',
'1-11Q' HM,
'72364' CDSC_ID,
'T-2-3-加' CDSC_NAME,
date '2012-12-24' CDSC_EFF_DT
from dual
union all
select '2',
'1-117' HM,
'76161' CDSC_ID,
'T-1-1' CDSC_NAME,
date '2012-12-24' CDSC_EFF_DT
from dual
union all
select '2',
'1-117' HM,
'76161' CDSC_ID,
'T-1-1-副' CDSC_NAME,
date '2012-12-24' CDSC_EFF_DT
from dual
union all
select '3',
'1-1RE' HM,
'761916' CDSC_ID,
'Q-3-5' CDSC_NAME,
date '2012-12-24' CDSC_EFF_DT
from dual
union all
select '4',
'1-11P ' HM,
'719113' CDSC_ID,
'D-4-5 ' CDSC_NAME,
date '2012-12-24' CDSC_EFF_DT
from dual
union all
select '5',
'1-1OA' HM,
'761916' CDSC_ID,
'V-6-5 ' CDSC_NAME,
date '2012-12-24' CDSC_EFF_DT
from dual)
select t1.*
from a t1
where (t1.id, t1.cdsc_id) in
(select id, cdsc_id

from (select *

from a

where a.id in ('1', '2', '3', '4', '5')

order by cdsc_id --这里可以

) t2
where t1.id = t2.id
--order by id,cdsc_id这里就无效
)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行