| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2365 人关注过本帖
标题:在百度遇到的一个问题,麻烦各位看一下用SQL语句能否实现,反正我的水平是不 ...
只看楼主 加入收藏
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:4 
以下是引用taifu945在2013-4-5 09:56:49的发言:

经研究,可以用一条SELECT-SQL命令得出结果。如果你的流水号和卡号都是自然数的话,可以试试下面的命令(我用的数据就是你在顶楼贴出来的):
SELECT * ;
   FROM ;
      (SELECT DISTINCT Kahao_a Kahao, STR(VAL(Sycs_b)-VAL(Sycs_a),1) Sycs ;
          FROM ;
            (SELECT * ;
                FROM T1 ;
                   JOIN T1 T1_a ;
                      ON T1.kahao=T1_a.Kahao AND T1.Sycs
楼主这段代码前应该还有代码吧,否则Kahao_a,Sycs_b,Sycs_a从何而来?
所以说,你的这一条SQL命令是解决不了问题的

[ 本帖最后由 lygcw9603 于 2013-4-5 10:44 编辑 ]
2013-04-05 10:25
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
你可以把楼主的数据做个表,然后单独运行这句命令,就知道需不需要前句了。你提出这个质疑说明对SELECT-SQL语句认识不深啊。
2013-04-05 11:35
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:0 
以下是引用taifu945在2013-4-5 11:35:16的发言:

你可以把楼主的数据做个表,然后单独运行这句命令,就知道需不需要前句了。你提出这个质疑说明对SELECT-SQL语句认识不深啊。
说实在话,我对SQL命令理解是不深的,这个示例中的KAHAO及SYCS都是一个字节字符的宽度,如果是两个字节的宽度,你这段代码可能就要出问题了
程序代码:
CREATE CURSOR T1 (KAHAO C(2),SYCS C(2))   &&原始数据表
CSTR=[1,1;2,1;1,2;2,2;1,4;2,5;3,1;3,2;1,5;10,1;1,12;10,15]
FOR I=1 TO ALINE(AA,CSTR,[;])
    =ALINE(BB,AA(I),[,])
    INSERT INTO T1 VALUES (BB(1),BB(2))
ENDFOR
如果数据表是上述情况,又如何
2013-04-05 12:18
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
回复 13楼 lygcw9603
这只是个方法示例,如果数据是其它形式,代码当然要作相应修改。我的代码只是提供一种方法,这种方法仅限于楼主给出的数据范例。明白吗?鸡蛋里挑骨头无助于知识的积累。不提两位数什么的,就楼主给出的一位数数据,在我之前不也没人用一条命令拿下来吗?
2013-04-05 12:30
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
回复 13楼 lygcw9603
代码一般只针对当前数据的状况,不然为什么还有代码维护一说呢?照你现在的逻辑,表示年份的字段就没法定宽度了。
2013-04-05 12:34
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
回复 13楼 lygcw9603
我现在用手机回复,等我到家试试你的数据,看看在原有代码上改变多少。
2013-04-05 12:40
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:0 
以下是引用taifu945在2013-4-5 12:30:15的发言:

这只是个方法示例,如果数据是其它形式,代码当然要作相应修改。我的代码只是提供一种方法,这种方法仅限于楼主给出的数据范例。明白吗?鸡蛋里挑骨头无助于知识的积累。不提两位数什么的,就楼主给出的一位数数据,在我之前不也没人用一条命令拿下来吗?
我看你是走火入魔了
2013-04-05 12:54
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:0 
程序代码:
CREATE CURSOR TT (K C(2),S C(2))  &&流水号对比临时表
CREATE CURSOR T (K C(2),S C(2))   &&原始数据表
CSTR=[1,1;2,1;1,2;2,2;1,4;2,5;3,1;3,2;1,5;10,3;1,12;10,15]
FOR I=1 TO ALINE(AA,CSTR,[;])
    =ALINE(BB,AA(I),[,])
    INSERT INTO T VALUES (BB(1),BB(2))
ENDFOR
L1=FSIZE(FIELD(1))
L2=FSIZE(FIELD(2))
SELECT K,1 M1,CAST(MAX(VAL(S)) AS N(L2)) M2,COUNT(S) CN FROM T GROUP BY 1 INTO CURSOR T1
BROWSE
SCAN
   FOR I=T1.M1 TO T1.M2
       INSERT INTO TT VALUES (T1.K,TRANSFORM(I))
   ENDFOR
ENDSCAN
SELECT A.R K,A.S FROM (SELECT CAST(TT.K AS N(L2)) R,NVL(T.K,[]) K,TT.S S FROM T FULL JOIN TT ON T.S==TT.S AND T.K==TT.K) A WHERE EMPTY(K) ORDER BY 1
在S版的代码基础上做了改进
2013-04-05 13:14
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
我明白10楼的构思。可能有一点大意了。希望再思考一下。
就是大意在“先把表文件在Sycs字段上进行错位自联接(这一步很关键)” 这过程。
数理上,在一组正整数中,通过其中任意二数相减,不一定得到所丢失的”流水号".


Kahao   Sycs
1        1
1        2
1        3
1        8
用你的SQL 语句,4 这个丢失的流水号就查不出来.



[ 本帖最后由 kiff 于 2013-4-7 10:30 编辑 ]
2013-04-05 15:01
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:4 
你们先去研究一下逻辑关系再来发表言论。楼主的案例不需要通过一个完整的数列来找出缺漏部分,只需要缺漏部分能全部出现在待筛选的数列中即可。

[ 本帖最后由 taifu945 于 2013-4-5 18:16 编辑 ]
2013-04-05 17:50
快速回复:在百度遇到的一个问题,麻烦各位看一下用SQL语句能否实现,反正我的水 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018835 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved