关于SQL的查询输出问题 用PL/SQL写。调用其中的UTL_FILE包。我现在正在生成和你类似的报表呢:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你有2000个customer,那怎么办?有这么大的报表纸吗? 这是一个交叉表的查询,在access中通过一个sql语句就可以做,在oracle中好象是不可以的,必须通过pl/sql块来实现 另外有个custom表 ,结构如下 customid varchar2(10) , customname varchar2(50) ,需要在procedure里实现上述功能 ,急! select goodsid,sum(decode(customid,1,counts,0)) custom1, sum(decode(customid,2,counts,0)) custom2, sum(decode(customid,3,counts,0)) custom3, sum(decode(customid,4,counts,0)) custom4, sum(decode(customid,5,counts,0)) custom5, sum(decode(customid,6,counts,0)) custom6, sum(decode(customid,7,counts,0)) custom7, sum(decode(customid,8,counts,0)) custom8, sum(decode(customid,9,counts,0)) custom9from (select goodsid,customid,sum(counts)from tnamegroup by goodsid,customid )group by goodsid PL/SQL写,在过程里先建一个临时表,表结构和你的报表一样,然后插入所有GOODSID的空记录,然后用客户ID循环,UPDATE 这个表就可以了。 好象也只能DECODE了,如果你用PB可以利用PB的交叉表DATAWINDOW生成 我用的是Delphi + FastReport 很多报表工具都提供旋转表的功能,称为pivot或者cross-table如果列的数量是固定的,那用decode完成不难,如楼上提供的写法但是如果列数不定,那就只能用动态sql来写,其实就是拼接sql字符串,通过几个步骤完成:1、select distinct CustomID from ... where ...; 或者所有的CustomID2、对customid循环拼接出如上的decode语句3、执行动态的语句 不好意思,我没做过这样格式的报表,但是对于:GoodsID CustomID1 CustomID2 CustomID3 ..CustomID 这样的可以,正如三千说的要是你的 客户 ID 很多的话,你也没有那样的纸一下子打印出来,所以建议采用我那样的格式。我的格式只要加个 qreport 和query 就可以完成。具体的 sql 语句为: select GoodsID , CustomID , sum(CustomID) from table group by GoodsID , CustomID having 条件 PS: 我这样的方法也只能对于GoodsID 数目确定好用。要是数目不确定,不想建临时表的话,你在统计前先查询表中当前有多少GoodsID ,再实时生成字段 text。 好像不能动态的实现阿!如果CustomID的值很少或者固定的,用DECODE 和 zhoubf725的语句都可以. 怎么查询数据的插入的时间 一个sql很简单的求时间重叠数据的问题 求一SQL语句 asp.net 2.0连接oracle10g的问题 rac的多个节点使用DBMS_LOB包的问题 sqlserver的函数如何转换为oracle 10g的函数 请问怎么删除掉oracle的数据实例服务 关于create any table及权限问题 可以在oracle的过程中操作xml文件吗 如何修改SID? 如何在PL/SQL块中调用其它用户的对象! 如何在TRIGGER中得到增删改的sql语句
customid varchar2(10) ,
customname varchar2(50) ,需要在procedure里实现上述功能 ,急!
sum(decode(customid,2,counts,0)) custom2,
sum(decode(customid,3,counts,0)) custom3,
sum(decode(customid,4,counts,0)) custom4,
sum(decode(customid,5,counts,0)) custom5,
sum(decode(customid,6,counts,0)) custom6,
sum(decode(customid,7,counts,0)) custom7,
sum(decode(customid,8,counts,0)) custom8,
sum(decode(customid,9,counts,0)) custom9
from (
select goodsid,customid,sum(counts)
from tname
group by goodsid,customid
)
group by goodsid
但是如果列数不定,那就只能用动态sql来写,其实就是拼接sql字符串,通过几个步骤完成:
1、select distinct CustomID from ... where ...; 或者所有的CustomID
2、对customid循环拼接出如上的decode语句
3、执行动态的语句
GoodsID
CustomID1
CustomID2
CustomID3
.
.
CustomID
这样的可以,正如三千说的要是你的 客户 ID 很多的话,你也没有那样的纸
一下子打印出来,所以建议采用我那样的格式。
我的格式只要加个 qreport 和query 就可以完成。
具体的 sql 语句为:
select GoodsID , CustomID , sum(CustomID) from table group by
GoodsID , CustomID having 条件
PS: 我这样的方法也只能对于GoodsID 数目确定好用。要是数目不确定,不想建临时表的话,你在统计前先查询表中当前有多少GoodsID ,再实时生成字段 text。