sql语句如何写入ASP语句中?

来源:百度知道 编辑:UC知道 时间:2024/06/25 16:36:17
我想用ASP+SQL写个关于连续号码断点盘存的页面,但总通不过,请指点:

ID PZLB PZHM
1 AA 1001
2 AA 1003
3 AA 1004
4 AA 1007
5 AA 1008
6 BB 1010

想显示结果为:
PZLB Start_HM End_HM
AA 1001 1001
AA 1003 1004
AA 1007 1008
BB 1010 1010

可在ASP中如下句子通不过
set rs=server.createobject("adodb.recordset")
sql="SELECT b.PZLB, MIN (b.PZHM) Start_HM, MAX (b.PZHM) End_HM"&_
"FROM (SELECT a.*, TO_NUMBER (a.PZHM - ROWNUM) cc"&_
"FROM (SELECT *"&_
"FROM GNH"&_
"ORDER BY PZLB, PZHM) a) b"&_
"GROUP BY b.PZLB, b.cc"
rs.open sql,conn,1,1

你这样的结果希望一个SQL实现可能不现实,例如数据是有AA 1001~AA 1100的连续100个又怎么处理?

如果所有数据都象你列举的那样,最多有两个连续的,那就可以用一个SQL来实现。

所以,我认为,你应该用程序来实现归并,SQL只是一个全扫描即可:
sql="SELECT PZLIB,PZHM FROM GNH ORDER BY PZLIB,PZHM"

程序这样循环:
preLB=""
preHM=0
line="PZLB Start_HM End_HM"
while not rd.eof()
if rs("PZLB")<>preLB then'判断是否新的代码
if preHM<>0 then line=line&" "&preHM
response.write line&"<BR>"
preLB=rs("PZLB")
preHM=rs("PZHM")
line=preLB&" "&preHM
else'同一个代码要判断是否连号
if rs("PZHM")=preHM+1 then'连号的只修改上一个号码,无需其它处理
preHM=preHM+1
else'不连号就要输出以前的内容
line=line&" "&preHM
response.write line&"<BR>"
preHM=rs("PZHM")
line=preLB&" "&preHM
end if
end if
rs.movenext()
loop

由于没有环境,上面的代码我无法调试,希望你能够看明白,有不妥的地方希望你完