to:bzszp(SongZip) 重复列可以使select语句简洁,如 "select to_char(a.tbrq, 'YYYY-MM-DD') as tbrq, to_char(a.jzrq, 'YYYY-MM-DD') as jzrq, " + "a.*, b.bxgsmc, c.dwmc,a.bf1+a.bf2+a.bf3+a.bf4+a.bf5+a.bf6 as hj " + "from rc_bxdmx a, rc_bxgs b, jc_dwml c " + "where a.bxgsbh=b.bxgsbh and a.djh='" + djh + "' " + "and substr(a.dwdm,1,length('" + dwdm + "'))='" + dwdm + "' " + "and a.dwdm=c.dwdm" 为了转换tbrq和jzrq为char这样做可以省去写出rc_bxdmx表中30个字段名的繁琐,查询结果在java里访问时对同名列默认取第一列to:beckhambobo(beckham) 从上面的select语句可以看出,无法采用你的变通方法
select a.*, rownum as rn from ( select fl, bh, fl '别名' from dy_zd where fl='R2' ) a 就OK了
to : verybigmouthz(大嘴智) 我的情况还必须用数据库原字段名,不能用fl '别名'
在外层使用重复列,例如: select f1,bh,f1,rownum as rn from ( select fl, bh from dy_zd where fl='R2')
同意 tsj68(tsj) 的说法! 不过楼主这样做为什么实际的意义呢???
如果你的外层select只是增加了rownum的话,可以放在内层,省去了外层SQL。
同意tsj68(tsj) 的方法 直接, 如果有其他需要你也可以用 select f1, bh, '别名' f1, rownum as rn from ( select fl, bh, fl '别名' from dy_zd where fl='R2' ) a 不过这样是不是有点多些一举呢 呵呵
我的意图是这样的: 原本我的查询是 sqlStr = "select a.*, b.bxgsmc, c.dwmc,a.bf1+a.bf2+a.bf3+a.bf4+a.bf5+a.bf6 as hj from rc_bxdmx a, rc_bxgs b, jc_dwml c where a.bxgsbh=b.bxgsbh and a.djh='111' and substr(a.dwdm,1,length('100'))='100' and a.dwdm=c.dwdm"; 其中a.*有30多个字段,但其中两个字段tbrq,jzrq为date类型,这种类型取到java环境里显示出来是连带小时分秒的,我想要的是YYYY-MM-DD的字符串,而在java里再做处理时要达到通用化就必须先判断字段的数据类型,增加了复杂性,所以采用oracle的to_char函数,于是查询语句写成 sqlStr2 = "select to_char(a.tbrq, 'YYYY-MM-DD') as tbrq, to_char(a.jzrq, 'YYYY-MM-DD') as jzrq, a.*, b.bxgsmc, c.dwmc,a.bf1+a.bf2+a.bf3+a.bf4+a.bf5+a.bf6 as hj from rc_bxdmx a, rc_bxgs b, jc_dwml c where a.bxgsbh=b.bxgsbh and a.djh='111' and substr(a.dwdm,1,length('100'))='100' and a.dwdm=c.dwdm"; tbrq, jzrq都会取第一列 然而为了打印处理, 1、查询结果中不是所有的列都需要,用户会定义打印模版,从而选择他们需要的列进行显示 2、肯定是分页打印,每打印一页就从数据库中查一页,而不是把几十万条纪录都查出来然后在java环境里选择一页进行打印 所以sqlStr2变成 sqlStr3 = "select 用户需要的字段, rownum as rn from (" + sqlStr2 + ") where rn>=1 and rn<=30" 此时oracle报错:未明确定义列 这种情况在系统里用的很多,所以要做成通用化的处理过程,于是产生我的问题
重复列可以使select语句简洁,如
"select to_char(a.tbrq, 'YYYY-MM-DD') as tbrq, to_char(a.jzrq, 'YYYY-MM-DD') as jzrq, " +
"a.*, b.bxgsmc, c.dwmc,a.bf1+a.bf2+a.bf3+a.bf4+a.bf5+a.bf6 as hj " +
"from rc_bxdmx a, rc_bxgs b, jc_dwml c " +
"where a.bxgsbh=b.bxgsbh and a.djh='" + djh + "' " +
"and substr(a.dwdm,1,length('" + dwdm + "'))='" + dwdm + "' " +
"and a.dwdm=c.dwdm"
为了转换tbrq和jzrq为char这样做可以省去写出rc_bxdmx表中30个字段名的繁琐,查询结果在java里访问时对同名列默认取第一列to:beckhambobo(beckham)
从上面的select语句可以看出,无法采用你的变通方法
from
( select fl, bh, fl '别名'
from dy_zd
where fl='R2'
) a
就OK了
我的情况还必须用数据库原字段名,不能用fl '别名'
select f1,bh,f1,rownum as rn from ( select fl, bh from dy_zd where fl='R2')
不过楼主这样做为什么实际的意义呢???
直接, 如果有其他需要你也可以用
select f1, bh, '别名' f1, rownum as rn
from
( select fl, bh, fl '别名'
from dy_zd
where fl='R2'
) a
不过这样是不是有点多些一举呢
呵呵
原本我的查询是
sqlStr = "select a.*, b.bxgsmc, c.dwmc,a.bf1+a.bf2+a.bf3+a.bf4+a.bf5+a.bf6 as hj
from rc_bxdmx a, rc_bxgs b, jc_dwml c
where a.bxgsbh=b.bxgsbh and a.djh='111'
and substr(a.dwdm,1,length('100'))='100' and a.dwdm=c.dwdm";
其中a.*有30多个字段,但其中两个字段tbrq,jzrq为date类型,这种类型取到java环境里显示出来是连带小时分秒的,我想要的是YYYY-MM-DD的字符串,而在java里再做处理时要达到通用化就必须先判断字段的数据类型,增加了复杂性,所以采用oracle的to_char函数,于是查询语句写成
sqlStr2 = "select to_char(a.tbrq, 'YYYY-MM-DD') as tbrq, to_char(a.jzrq, 'YYYY-MM-DD') as jzrq, a.*, b.bxgsmc, c.dwmc,a.bf1+a.bf2+a.bf3+a.bf4+a.bf5+a.bf6 as hj
from rc_bxdmx a, rc_bxgs b, jc_dwml c
where a.bxgsbh=b.bxgsbh and a.djh='111'
and substr(a.dwdm,1,length('100'))='100' and a.dwdm=c.dwdm";
tbrq, jzrq都会取第一列
然而为了打印处理,
1、查询结果中不是所有的列都需要,用户会定义打印模版,从而选择他们需要的列进行显示
2、肯定是分页打印,每打印一页就从数据库中查一页,而不是把几十万条纪录都查出来然后在java环境里选择一页进行打印
所以sqlStr2变成
sqlStr3 = "select 用户需要的字段, rownum as rn from (" + sqlStr2 + ") where rn>=1 and rn<=30"
此时oracle报错:未明确定义列
这种情况在系统里用的很多,所以要做成通用化的处理过程,于是产生我的问题