表名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
怎么改写这个语句呢,请大家帮我,很急。谢谢!
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
怎么改写这个语句呢,请大家帮我,很急。谢谢!
游标定义成 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 临时表效率比较低
:)
/INSERT INTO PRINTTBL
SELECT
105,1,'申请表',1 FROM DUAL UNION SELECT
106,1,'申请表',2 FROM DUAL UNION SELECT
107,1,'申请表',3 FROM DUAL UNION SELECT
108,1,'审核表',4 FROM DUAL UNION SELECT
109,1,'审核表',5 FROM DUAL UNION SELECT
110,1,'身份证',6 FROM DUAL UNION SELECT
111,1,'证明材料',7 FROM DUAL;
/SELECT NAME, DECODE(COUNT(SEQ),1, TO_CHAR(MIN(PAGE)),TO_CHAR(MIN(PAGE)) || '-' || TO_CHAR(MAX(PAGE)))
FROM PRINTTBL
GROUP BY SEQ,NAME;
/
SELECT NAME, DECODE(COUNT(SEQ),1, TO_CHAR(MIN(PAGE)),
TO_CHAR(MIN(PAGE)) || '-' || TO_CHAR(MAX(PAGE))) AS SHOWPAGE
FROM PRINTTBL
GROUP BY SEQ,NAME
ORDER BY DECODE(COUNT(SEQ),1, TO_CHAR(MIN(PAGE)),
TO_CHAR(MIN(PAGE)) || '-' || TO_CHAR(MAX(PAGE)));
不知道你字段类型,这样定义的。select t3.材料名称,decode(t3.num,1,t1.页号,t2.页号) 页号 from
(select 材料名称,min(页号) 页号 from table1 where 业务号='1' group by 材料名称) t1,
(select 材料名称,min(页号) || '-' || max(页号) 页号 from table1 where 业务号='1' group by 材料名称) t2,
(select count(*) num,max(材料名称) 材料名称 from table1 where 业务号='1' group by 材料名称) t3
where t1.材料名称=t2.材料名称 and t2.材料名称=t3.材料名称 order by 页号;
select 材料名称,TO_CHAR(min(页号)) || '-' || TO_CHAR(max(页号)) from table1 where 业务号=1 group by 材料名称 ORDER BY min(页号)
改为:
select 材料名称,case when min_页号=max_页号 then to_char(min_页号) when min_页号<max_页号 then to_char(min_页号)||'-'||to_char(max_页号) end as result
from (
select 材料名称,TO_CHAR(min(页号)) as min_页号, TO_CHAR(max(页号)) as max_页号 from table1 where 业务号=1 group by 材料名称 ORDER BY min(页号))BTW:真不习惯列名用汉字