回 帖 发 新 帖 刷新版面

主题:解答 dean_andy

比如字段名A,B

字段内容 张三 103

李四 101

李四 104

张三 105

王五 106

李四 108

王五 107

输出结果:A B

张三 103,105

李四 101,104,108

王五 106,107

怎么用最简单的语句得出以上结果,求解!





set safety off
close all
clear

 

close all
sele *  from 表1 ; &&&&&&&&&& 原始表
 order by a,b into table b3.dbf

 

close all
sele recn() sx,*  from b3.dbf into table b4.dbf

 

close all
sele a,count(allt(a)) gs  from b4.dbf group by a  into table b1.dbf

 

close all
sele a.*,b.gs  from b4.dbf a,b1.dbf b  where allt(a.a)==allt(b.a)  order by a.sx  into table b2.dbf

 

close all
sele a,b from b2.dbf where gs=1 into table c1.dbf

 

close all
sele a.a,allt(a.b)+','+allt(b.b) b  from b2.dbf a,b2.dbf b ;
 where allt(a.a)==allt(b.a) and a.gs=2 and b.gs=2 and a.sx<>b.sx ;
 order by a.sx  into table c2.dbf

 

close all
sele a,min(b) b from c2.dbf group by a into table c3.dbf

 

close all
sele a.a,allt(a.b)+','+allt(b.b)+','+allt(c.b) b  from b2.dbf a,b2.dbf b,b2.dbf c ;
 where allt(a.a)==allt(b.a) and allt(a.a)==allt(c.a) and  a.gs=3 and b.gs=3 and c.gs=3 and ;
 a.sx<>b.sx and a.sx<>c.sx and b.sx<>c.sx order by a.sx  into table c4.dbf

 

close all
sele a,min(b) b from c4.dbf group by a into table c5.dbf

 

close all
use c5.dbf &&&&&&&&&&&&& 结果表
appen from c3.dbf
appen from c1.dbf

 

close all
erase b3.dbf
erase b4.dbf
erase b1.dbf
erase b2.dbf
erase c1.dbf
erase c2.dbf
erase c3.dbf
erase c4.dbf

 

close all
quit

回复列表 (共7个回复)

沙发


谢谢

板凳

有个问题,如果是十条记录累加呢!加10个临时库吗

3 楼

像你这种问题,建议你去问问堂在线咨询一下,或者到任务大厅发个任务,会有相关专业人事为你解答的。
问问堂成立于2010年,致力于打造中国领先的在线咨询交易平台。问问堂开设有健康、法律、心理、星座、命理、教育、创业、电脑数码、婚嫁、房产等等360行共31个一级分类,198个二级分类,1500余个三级分类,同时开设有问问堂任务大厅,力求使中国人足不出户解决一切烦恼。

4 楼

&&&&&&&&&&  qjbzjp老师已经给出了答案


set safety off
close all
clear

close all
USE a1                         &&&&&&&&&&&&& 将a1改为你的原表名

SELECT a,b FROM a1 ;           &&&&&&&&&&&&& 将a1改为你的原表名
 group BY 1  into table c1     &&&&&&&&&&&&& c1为结果表

ALTER TABLE c1 alter COLUMN b C(60)

REPLACE ALL b WITH ""

FOR i=1 to recc()
    GO i
    FOR j=1 TO RECCOUNT("a1")  &&&&&&&&&&&&& 将a1改为你的原表名
        GO j IN a1             &&&&&&&&&&&&& 将a1改为你的原表名
        IF a=a1.a              &&&&&&&&&&&&& 将a1改为你的原表名
            REPLACE b WITH ALLTRIM(b)+IIF(EMPTY(b),"",",")+;
TRANSFORM(a1.b)                &&&&&&&&&&&&& 将a1改为你的原表名
        ENDIF 
    NEXT  
NEXT 

close all
quit

5 楼


像你这种问题,建议你去问问堂在线咨询一下,或者到任务大厅发个任务,会有相关专业人事为你解答的。
问问堂成立于2010年,致力于打造中国领先的在线咨询交易平台。问问堂开设有健康、法律、心理、星座、命理、教育、创业、电脑数码、婚嫁、房产等等360行共31个一级分类,198个二级分类,1500余个三级分类,同时开设有问问堂任务大厅,力求使中国人足不出户解决一切烦恼。

6 楼

谢谢

7 楼

太长了

SELECT distinc xm,SPACE(40) as xhs FROM stu INTO dbf stua
SELECT stu
FOR i=1 TO RECCOUNT()
  GO i
  curxh=xh
  curxm=xm
  UPDATE stua SET xhs=ALLTRIM(xhs)+','+ALLTRIM(curxh) WHERE stua.xm=curxm
ENDFOR 
UPDATE stua SET xhs=SUBSTR(xhs,2) 

我来回复

您尚未登录,请登录后再回复。点此登录或注册