Suppose a sample table (abc.dbf) contained the following data record:

a b c d e title
1 USA
10 USA
100 USA
1000 USA
10000 USA
11 Japan
110 Japan
1100 Japan
11000 Japan
12 Peter
121 Mary On
1210 Mary On
12100 Mary On
122 Sharon Li
1220 Sharon Li
12200 Sharon Li


How can I make into the following result:
a b c d e title
1 10 100 1000 10000 USA
11 110 1100 11000 Japan
12 Peter
121 1210 12100 Mary On
122 1220 12200 Sharon Li


The fields (a,b,c,d,e,title) are characters!!

I am using Visual FoxPro 6.0

Thanks and regards,
Patrick

Re: collapse the expanded strutcure by Man-wai

Man-wai
Wed Jan 10 03:18:22 CST 2007


1. Must it be done in one single SQL statement? :)

--
iTech Consulting Co., Ltd.
Specialized in providing ePOS solutions
Website: http://www.itech.com.hk (IE only)
Tel: (852) 2325 3883 Fax: (852)2325 8288

Re: collapse the expanded strutcure by Anders

Anders
Wed Jan 10 06:26:20 CST 2007

Given two columns called code and ref, in your source table X :
In one step:

CREATE CURSOR x (code Char (6), ref Char(6))
* populate

*Then
* in one step:

SELECT * FROM ( ;
SELECT a1.CODE AS code_a, b1.CODE, c1.CODE, d1.CODE, e1.CODE , a1.ref ;
FROM x AS a1 ;
LEFT JOIN x AS b1 ON VAL(a1.CODE)*10=VAL(b1.CODE) ;
LEFT JOIN x AS c1 ON VAL(a1.CODE)*100=VAL(c1.CODE) ;
LEFT JOIN x AS d1 ON VAL(a1.CODE)*1000=VAL(d1.CODE) ;
LEFT JOIN x AS e1 ON VAL(a1.CODE)*10000=VAL(e1.CODE) ) AS A2 ;
WHERE A2.code_a = ;
(SELECT MIN(code_a) FROM A2 AS a3 WHERE A2.ref = a3.ref)


* In two steps:

SELECT a1.CODE AS CODE, b1.CODE, c1.CODE, d1.CODE, e1.CODE , a1.ref ;
FROM x AS a1 ;
LEFT JOIN x AS b1 ON VAL(a1.CODE)*10=VAL(b1.CODE) ;
LEFT JOIN x AS c1 ON VAL(a1.CODE)*100=VAL(c1.CODE) ;
LEFT JOIN x AS d1 ON VAL(a1.CODE)*1000=VAL(d1.CODE) ;
LEFT JOIN x AS e1 ON VAL(a1.CODE)*10000=VAL(e1.CODE) ;
INTO CURSOR A2

SELECT * FROM A2 WHERE code_a = ;
(SELECT MIN(code_a) FROM A2 AS a3 ;
WHERE A2.ref=a3.ref)

Result:
Code_a_a Code_a_b Code_b Code_c Code_d Ref
1 1 100 1000 10000 USA
11 11 1100 11000 .NULL. Japan
12 12 .NULL. .NULL. .NULL. Peter
121 121 12100 .NULL. .NULL. Mary_On
122 122 12200 .NULL. .NULL. Sharon_Li

SET NULLDISPLAY TO ''

-Anders

"Patrick" <someone@microsoft.com> wrote in message
news:eLm4hQJNHHA.4912@TK2MSFTNGP02.phx.gbl...
> Suppose a sample table (abc.dbf) contained the following data record:
>
> a b c d e title
> 1 USA
> 10 USA
> 100 USA
> 1000 USA
> 10000 USA
> 11 Japan
> 110 Japan
> 1100 Japan
> 11000 Japan
> 12 Peter
> 121 Mary On
> 1210 Mary On
> 12100 Mary On
> 122 Sharon Li
> 1220 Sharon Li
> 12200 Sharon Li
>
>
> How can I make into the following result:
> a b c d e title
> 1 10 100 1000 10000 USA
> 11 110 1100 11000 Japan
> 12 Peter
> 121 1210 12100 Mary On
> 122 1220 12200 Sharon Li
>
>
> The fields (a,b,c,d,e,title) are characters!!
>
> I am using Visual FoxPro 6.0
>
> Thanks and regards,
> Patrick
>
>