日期:2014-05-17  浏览次数:20727 次

怎么循环比较字段内容的大小? 这个SQL语句该怎么写.只有40分了全奉送,很急.
表名TABLE1
ID           业务号       材料名称           页号
105           1                   申请表               1
106           1                   申请表               2
107           1                   申请表               3
108           1                   审核表               4
109           1                   审核表               5
110           1                   身份证               6
111           1                   证明材料           7
112           2       .......
113           3       .......


即业务号相同的行中,某种材料名称可能有好几页

现在想做报表打印某个业务号的目录,比如想打印业务号为1的目录如下

                申请表             1-3
                审核表             4-5
                身份证               6
                证明材料           7      
这段代码该怎么写?

在VB论坛中我用网友教的方法
  select   材料名称,TO_CHAR(min(页号))   ||   '- '   ||   TO_CHAR(max(页号))     from   table1   where   业务号=1     group   by   材料名称   ORDER   BY   min(页号)
  得到如下结果
                申请表             1-3
                审核表             4-5
                身份证             6-6     '我只想要的是   6
                证明材料         7-7     '我只想要的是   7
怎么改写这个语句呢,请大家帮我,很急。谢谢!

------解决方案--------------------
用UNION ALL 试试 就是比较麻烦
------解决方案--------------------
不用语句,用存储过程就比较方便
游标定义成 select 材料名称 from table1 where 业务号=1 group by 材料名称
之后 循环
select 材料名称,TO_CHAR(min(页号)) || '- ' || TO_CHAR(max(页号)) from table1 where 业务号=1 group by 材料名称 ORDER BY min(页号)
把TO_CHAR(min(页号)) || '- ' || TO_CHAR(max(页号))放到一个变量里面
加个IF判断TO_CHAR(min(页号))和TO_CHAR(max(页号))是否相等
相等后就取TO_CHAR(max(页号)
之后把这个结果插入一个临时表里面

最后select * from 临时表

效率比较低
:)

------解决方案--------------------
看下面:

CREATE TABLE PRINTTBL(ID NUMBER, SEQ NUMBER, NAME VARCHAR2(50), PAGE NUMBER)
/

INSERT IN