标题:求个查询方案
只看楼主
dhy793202
Rank: 1
等 级:新手上路
帖 子:29
专家分:4
注 册:2013-3-17
结帖率:75%
已结贴  问题点数:30 回复次数:13 
求个查询方案
现在有A表有如下三列
姓名    类别                    代码
张三    湖北省                  A05
张三    湖北省荆州市            A0501
张三    湖北省荆州市红安县      A050101
李四    北京市                  A01
张三    高级教师                B0101
张三    高级小学教师            B010101
张三    教师                    B01
李四    程序员                  B03
李四    高级程序员              B0303


现在想要查询出每个人名下最专指的类别,代码栏目字母代表大的类别(比如A是地区B是职业),代码的数字位是该类别下的细分,比如A地区类下05两个数字代表市级,0501代表县级别

现在想要得出如下结果:
姓名    类别                    代码
张三    湖北省荆州市公安县      A050101
李四    北京市                  A01
张三    高级小学教师            B010101
李四    高级程序员              B0303

[ 本帖最后由 dhy793202 于 2013-9-27 11:49 编辑 ]
搜索更多相关主题的帖子: 荆州市 红安县 湖北省 北京市 高级程序员 
2013-09-27 11:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:5 
1.查詢並不難,找同名中代碼最長的即可
2.數據結構不合理,設計這表的人可能沒學過數據庫理論吧

授人以渔,不授人以鱼。
2013-09-27 15:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:5 
按照T版所说的,重新建立数据表结构。
楼主当前表中数据重复,并且数据不完整。

坚守VFP最后的阵地
2013-09-27 17:04
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:5 
数据表结构合理 查询才快捷方便
2013-09-27 17:44
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
程序代码:
*VFP9.0 CODE
cStr=[张三 湖北省 A05,张三 湖北省荆州市 A0501,张三 湖北省荆州市红安县 A050101,李四 北京市 A01,]+;
     [张三 高级教师 B0101,张三 高级小学教师 B010101,张三 教师 B01,李四 程序员 B03,李四 高级程序员 B0303]
CREATE CURSOR T (姓名 C(10),类别 C(30),代码 C(10))
FOR I=1 TO ALINES(AXX,cStr,[,])
    =ALINES(BXX,AXX[I],[ ])
    INSERT INTO T FROM ARRAY BXX
ENDFOR
CREATE CURSOR T1 (姓名 C(10),类别 C(30),代码 C(10))
SELECT DISTINCT 姓名,LEFT(代码,1) 代码 FROM T INTO CURSOR T2
SCAN
   INSERT INTO T1 SELECT TOP 1 姓名,类别,代码 FROM T WHERE T2.代码$T.代码 AND ALLTRIM(T.姓名)==ALLTRIM(T2.姓名) ORDER BY T.代码 DESC
ENDSCAN
SELECT T1
BROWSE

坚守VFP最后的阵地
2013-09-27 18:40
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
得分:5 
SELECT 姓名,代码,类别 FROM 表1 a WHERE LEN(ALLTRIM(a.代码)) in(SELECT MAX(LEN(ALLTRIM(b.代码)))FROM 表1 b WHERE b.姓名=a.姓名)
2013-09-27 18:58
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
得分:5 
SELECT * from A表 into cursor nx readw
INDEX ON 姓名+LEFT(代码,1)+str(1-LEN(ALLTRIM(代码))) tag tagtemp desc
name=""
dm=""
SCAN
    IF  姓名==name .and. LEFT(ALLTRIM(代码),1)==dm
        REPLACE 类别 with ""
    ENDIF
    name=姓名
    dm=LEFT(ALLTRIM(代码),1)
ENDSCAN  
DELETE for EMPTY(类别)
SET DELETED on
brow

相互学习,互相交流,共同提高。
2013-09-27 22:06
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
回复 6楼 dzy123
少一项

SELECT 姓名,代码,类别,LEFT(代码,1) dm FROM 表1 INTO CURSOR n1
SELECT 姓名,代码,类别 FROM n1 a WHERE LEN(ALLTRIM(a.代码)) in(SELECT MAX(LEN(ALLTRIM(b.代码))) FROM n1 b WHERE b.姓名=a.姓名 and b.dm=a.dm) ORDER BY 姓名



[ 本帖最后由 tlliqi 于 2013-9-28 09:31 编辑 ]
2013-09-28 09:16
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
得分:0 
以下是引用tlliqi在2013-9-28 09:16:23的发言:

少一项

SELECT 姓名,代码,类别,LEFT(代码,1) dm FROM 表1 INTO CURSOR n1
SELECT 姓名,代码,类别 FROM n1 a WHERE LEN(ALLTRIM(a.代码)) in(SELECT MAX(LEN(ALLTRIM(b.代码))) FROM n1 b WHERE b.姓名=a.姓名 and b.dm=a.dm) ORDER BY 姓名
 
谢谢了
2013-09-28 09:59
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:5 
同意邓版的说法:该表的设计者完全不懂数据库设计的基本常识。
2013-09-28 12:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-421175-1-1.html




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

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