Q&A

  • Re: DB-Stringgrid - 명확한 답은 아니예요.
안녕하세요. 우선 답은 아니고요. 정보가 좀 더 필요해서요.



그러니깐 단순히 카운터를 한 값을 스트링그리드에 표현하는 것인가요?



그렇다면 쉽게 나올 수도 있을것 같은데요.



숫자를 표현 한다면 나이를 묶어서 질의하심이...



Select No, Cod, 10 Nai, count(*) cnt from HoywonDB

where nai between ''11'' and ''20''

group by No, Cod

union all

Select No, Cod, 20 Nai, count(*) cnt from HoywonDB

where nai between ''21'' and ''30''

group by No, Cod

union all

Select No, Cod, 30 Nai, count(*) cnt from HoywonDB

where nai between ''31'' and ''40''

group by No, Cod

union all

Select No, Cod, 40 Nai, count(*) cnt from HoywonDB

where nai between ''41'' and ''50''

group by No, Cod



김광재님의 질문을 정확히 이해하지 못해서 더이상 써 내려가면

이상할것 같아서 이만 줄이겠습니다.

약간만 더 부연 설명을 해 주신다면 명확한 답을 드릴수도 있을텐데,

아님 다른 고수들이 명확한 답변을 기둘릴수 밖에요.

죄송합니다.



김광재 wrote:

> 각설하고 여쭙겠습니다. 도와주세요..

>

> 쿼리문을 처음레코드 부터 끝까지 읽어서 각각의 해당항목에 값을 누적시키려고 합니다..

> 회원정보를 가지고 있는 DB가 있습니다.(DB Record 갯수는 약 1000건정도입니다.)

>

> 이 DB에서 회원코드가 10~20이면 A에 누적 시키고(+1...)

> 회원코드가 20~30이면 B에 누적 시키고

> 회원코드가 30~40이면 C에 누적 시키고

> 회원코드가 40~50이면 D에 누적 시키고

>

> 1000명의 회원은 코드가 반드시 위의 하나에 속해 있습니다.

>

> 또한 각 회원들을 연령대별로 구분해서 각각의 기억장소에 저장을 합니다

>

> 이 DB에서 회원나이가 11~20이면 a에 누적 시키고(+1...)

> 회원나이가 21~30이면 b에 누적 시키고

> 회원나이가 31~40이면 c에 누적 시키고

> 회원나이가 41~50이면 c에 누적 시키고

> 회원나이가 51~ 이면 d에 누적 시키는

>

> 그래서 이 누적된 값들을 출력할땐 스트링그리드에

>

>

> 코드10(A) 코드20(B) 코드30(C) 코드40(D) 코드50(E) 계

> ------------------------------------------------------------------------

> 10대(a) 1 2 5 2 4 14

> 20대(b) 2 3 2 1 1 9

> 30대(c) 1 1 1 1 1 5

> 40대(d) 1 2 5 2 4 14

> 50대(e) 2 3 2 1 1 9

> ========================================================================

> 총계 7 11 15 7 11 51

>

>

> 정말 정보처리기사문제랑 유형이 비슷한 것 같은데여(DB쓰는것 빼면)..

> 한달째 이거 하나갖고 헤메고 있습니다.

> 제발 이런 소스 있음 좀 부탁드립니다.

> 쿼리를 카운트해서 카운트만큼 DB를 읽으면서 한번에 하나씩 누적을 시키려했는데..

> 자꾸 뻗어버립니다. 역시 말이 안되는 것 같구여..

> 제발 부탁드립니다.

>

>

>

> begin

> k := 0;

> while frmstatistic.QryStatistic.Eof do

> begin

> frmstatistic.QryStatistic.Close;

> frmstatistic.QryStatistic.SQL.Clear;

> frmstatistic.QryStatistic.SQL.Add('Select No,Cod,Nai from HoywonDB');

> begin

> try

> frmstatistic.QryStatistic.Open;

>

> except

> Application.MessageBox('조건에 맞지 않는 값을 불렀습니다.',' ☞ 통계자료보기 ',Mb_OK+MB_Iconinformation);

> end;

> end;

> end;

3  COMMENTS
  • Profile
    정계훈 2001.10.18 01:02
    나이는 연령대로 범위인데 코드는 어떻게 되나요?

    그러니깐, 도표위에 보이는것처럼

    코드10(A) 코드20(B) 코드30(C) 코드40(D) 코드50(E)

    이거는 어떻게 나누어져 있나요? 이건만 좀 더 설명해 주세요.



    > 어떤 회원이 나이가 13세이고 코드가 35이라면

    > Stringrid.cells[1,3]:= 1 이되겠습니다.

    > 다음에서 같은 조건으로 17세 코드가 38이라면..

    > Stringrid.cells[1,3] := 2 가 되겠구요..



    여기서 보면 나이가 13세, 17세는 10대롤 묶었는데, 코드가 다른데 하나로 묶여있거든요. 그리고 DB는 무엇을 쓰시는지 좀...



    김광재 wrote:

    > 네.. 단순히 카운터를 한 값을 그리드에 표현하는 겁니다.

    >

    > 어떤 회원이 나이가 13세이고 코드가 35이라면

    > Stringrid.cells[1,3]:= 1 이되겠습니다.

    > 다음에서 같은 조건으로 17세 코드가 38이라면..

    > Stringrid.cells[1,3] := 2 가 되겠구요..

    > 이렇게 각 값을 누적시켜 나가는 겁니다.

    > 회원조건에 따라서 말이죠 다시한번 님께 부탁드립니다.

    > 좀 더 상세히 알려주신다면 정말 감사하겠습니다. 부탁드립니다.

    >

    >

    > 정계훈 wrote:

    > > 안녕하세요. 우선 답은 아니고요. 정보가 좀 더 필요해서요.

    > >

    > > 그러니깐 단순히 카운터를 한 값을 스트링그리드에 표현하는 것인가요?

    > >

    > > 그렇다면 쉽게 나올 수도 있을것 같은데요.

    > >

    > > 숫자를 표현 한다면 나이를 묶어서 질의하심이...

    > >

    > > Select No, Cod, 10 Nai, count(*) cnt from HoywonDB

    > > where nai between ''11'' and ''20''

    > > group by No, Cod

    > > union all

    > > Select No, Cod, 20 Nai, count(*) cnt from HoywonDB

    > > where nai between ''21'' and ''30''

    > > group by No, Cod

    > > union all

    > > Select No, Cod, 30 Nai, count(*) cnt from HoywonDB

    > > where nai between ''31'' and ''40''

    > > group by No, Cod

    > > union all

    > > Select No, Cod, 40 Nai, count(*) cnt from HoywonDB

    > > where nai between ''41'' and ''50''

    > > group by No, Cod

    > >

    > > 김광재님의 질문을 정확히 이해하지 못해서 더이상 써 내려가면

    > > 이상할것 같아서 이만 줄이겠습니다.

    > > 약간만 더 부연 설명을 해 주신다면 명확한 답을 드릴수도 있을텐데,

    > > 아님 다른 고수들이 명확한 답변을 기둘릴수 밖에요.

    > > 죄송합니다.

    > >

    > > 김광재 wrote:

    > > > 각설하고 여쭙겠습니다. 도와주세요..

    > > >

    > > > 쿼리문을 처음레코드 부터 끝까지 읽어서 각각의 해당항목에 값을 누적시키려고 합니다..

    > > > 회원정보를 가지고 있는 DB가 있습니다.(DB Record 갯수는 약 1000건정도입니다.)

    > > >

    > > > 이 DB에서 회원코드가 10~20이면 A에 누적 시키고(+1...)

    > > > 회원코드가 20~30이면 B에 누적 시키고

    > > > 회원코드가 30~40이면 C에 누적 시키고

    > > > 회원코드가 40~50이면 D에 누적 시키고

    > > >

    > > > 1000명의 회원은 코드가 반드시 위의 하나에 속해 있습니다.

    > > >

    > > > 또한 각 회원들을 연령대별로 구분해서 각각의 기억장소에 저장을 합니다

    > > >

    > > > 이 DB에서 회원나이가 11~20이면 a에 누적 시키고(+1...)

    > > > 회원나이가 21~30이면 b에 누적 시키고

    > > > 회원나이가 31~40이면 c에 누적 시키고

    > > > 회원나이가 41~50이면 c에 누적 시키고

    > > > 회원나이가 51~ 이면 d에 누적 시키는

    > > >

    > > > 그래서 이 누적된 값들을 출력할땐 스트링그리드에

    > > >

    > > >

    > > > 코드10(A) 코드20(B) 코드30(C) 코드40(D) 코드50(E) 계

    > > > ------------------------------------------------------------------------

    > > > 10대(a) 1 2 5 2 4 14

    > > > 20대(b) 2 3 2 1 1 9

    > > > 30대(c) 1 1 1 1 1 5

    > > > 40대(d) 1 2 5 2 4 14

    > > > 50대(e) 2 3 2 1 1 9

    > > > ========================================================================

    > > > 총계 7 11 15 7 11 51

    > > >

    > > >

    > > > 정말 정보처리기사문제랑 유형이 비슷한 것 같은데여(DB쓰는것 빼면)..

    > > > 한달째 이거 하나갖고 헤메고 있습니다.

    > > > 제발 이런 소스 있음 좀 부탁드립니다.

    > > > 쿼리를 카운트해서 카운트만큼 DB를 읽으면서 한번에 하나씩 누적을 시키려했는데..

    > > > 자꾸 뻗어버립니다. 역시 말이 안되는 것 같구여..

    > > > 제발 부탁드립니다.

    > > >

    > >

  • Profile
    정계훈 2001.10.18 01:29
    해답을 찾기 위해 고생많이 하셨다고 하셨는데, 명확한 답이 되었는지 모르겠네요...

    제가 넘 대충 적었는지도 모르겠고요. 하여간 함 보시고 의문 있으시면 연락주세요...

    그럼 수고 하세요...



    Var

    i, j, nai_str, cod_str : Integer;

    begin



    with StringGrid1 do

    begin

    Cells[ 0, 0] :='연령대 \ 코드';

    Cells[ 0, 1] :='10대(a)';

    Cells[ 0, 2] :='20대(b)';

    Cells[ 0, 3] :='30대(c)';

    Cells[ 0, 4] :='40대(d)';

    Cells[ 0, 5] :='50대(e)';

    Cells[ 0, 6] :='총계';



    Cells[ 1, 0]:='코드10(A)';

    Cells[ 2, 0]:='코드20(B)';

    Cells[ 3, 0]:='코드30(C)';

    Cells[ 4, 0]:='코드40(D)';

    Cells[ 5, 0]:='코드50(E)';

    Cells[ 6, 0]:='계';



    for i := 1 to 6 do

    begin

    for j := 1 to 6 do

    begin

    StringGrid1.Cells[ i, j] := '0'

    end;

    end;



    with Query1 do

    begin

    Close;

    SQL.Clear;

    SQL.Add(' Select Cod, 10 Nai, count(*) cnt from HoywonDB ');

    SQL.Add(' where nai between ''11'' and ''20'' ');

    SQL.Add(' group by Cod ');

    SQL.Add(' union all ');

    SQL.Add(' Select Cod, 20 Nai, count(*) cnt from HoywonDB ');

    SQL.Add(' where nai between ''21'' and ''30'' ');

    SQL.Add(' group by Cod ');

    SQL.Add(' union all ');

    SQL.Add(' Select Cod, 30 Nai, count(*) cnt from HoywonDB ');

    SQL.Add(' where nai between ''31'' and ''40'' ');

    SQL.Add(' group by Cod ');

    SQL.Add(' union all ');

    SQL.Add(' Select Cod, 40 Nai, count(*) cnt from HoywonDB ');

    SQL.Add(' where nai between ''41'' and ''50'' ');

    SQL.Add(' group by Cod ');

    Open;



    First;



    while Not EOF do

    begin

    (* 이 방법은 데이타를 전체 가지고 왔을때 쓰는데 1000번 수행을 하죠.

    case FieldByName('Nai').AsInteger of

    10,11,12,13,14,15,16,17,18,19,20 : nai_str := 1;

    20,21,22,23,24,25,26,27,28,29,30 : nai_str := 2;

    30,31,32,33,34,35,36,37,38,39,40 : nai_str := 3;

    40,41,42,43,44,45,46,47,48,49,50 : nai_str := 4;

    51,51,52,53,54,55,56,57,58,59,60,

    61,61,62,63,64,65,66,67,68,69,70,

    71,71,72,73,74,75,76,77,78,79,80,

    81,81,82,83,84,85,86,87,88,89,90 : nai_str := 5;

    end;

    *)

    // 위의 질의를 사용한다면 연령대별로 어는정도 걸러서 가지고 오니깐

    // 수행 시간이 단축되겠네요...

    case FieldByName('Nai').AsInteger of

    10 : nai_str := 1;

    20 : nai_str := 2;

    30 : nai_str := 3;

    40 : nai_str := 4;

    end;

    // 정확한 코드값을 몰라서 질의를 만들지 못하겠어요.

    // 위와 같이 나열해서 쓰실수 밖에 없네요...

    case FieldByName('Cod').AsInteger of

    35,38 : code_str := 1;

    45,48 : code_str := 2;

    55,68 : code_str := 3;

    65,68 : code_str := 4;

    75,78 : code_str := 5;

    end;



    StringGrid31.Cells[ nai_str, code_str] := IntToStr( StrToInt(StringGrid1.Cells[ nai_str, code_str]) +

    FieldByName('cnt').AsInteger);



    Next;

    end; // end of ~ while Not EOF do





    for i := 1 to 5 do

    begin

    // 총계

    StringGrid1.Cells[ i, 6] := IntToStr(StrToInt(StringGrid1.Cells[ i, 1]) +

    StrToInt(StringGrid1.Cells[ i, 2]) +

    StrToInt(StringGrid1.Cells[ i, 3]) +

    StrToInt(StringGrid1.Cells[ i, 4]) +

    StrToInt(StringGrid1.Cells[ i, 5])

    );



    // 계

    StringGrid1.Cells[ 6, i] := IntToStr(StrToInt(StringGrid1.Cells[ 1, i]) +

    StrToInt(StringGrid1.Cells[ 2, i]) +

    StrToInt(StringGrid1.Cells[ 3, i]) +

    StrToInt(StringGrid1.Cells[ 4, i]) +

    StrToInt(StringGrid1.Cells[ 5, i])

    );

    end; // end of ~ for i := 1 to 5 do

    end; // end od ~ with Query1 do

    end;

    end;





    김광재 wrote:

    > 네 님 코드도 범위로 되어있구여..

    > 나이도 나이대별로 범위로 되어있습니다.

    > 관심가져주셔서 정말 감사합니다.

    >

    >

    > 정계훈 wrote:

    > > 나이는 연령대로 범위인데 코드는 어떻게 되나요?

    > > 그러니깐, 도표위에 보이는것처럼

    > > 코드10(A) 코드20(B) 코드30(C) 코드40(D) 코드50(E)

    > > 이거는 어떻게 나누어져 있나요? 이건만 좀 더 설명해 주세요.

    > >

    > > > 어떤 회원이 나이가 13세이고 코드가 35이라면

    > > > Stringrid.cells[1,3]:= 1 이되겠습니다.

    > > > 다음에서 같은 조건으로 17세 코드가 38이라면..

    > > > Stringrid.cells[1,3] := 2 가 되겠구요..

    > >

    > > 여기서 보면 나이가 13세, 17세는 10대롤 묶었는데, 코드가 다른데 하나로 묶여있거든요. 그리고 DB는 무엇을 쓰시는지 좀...

    > >

    > > 김광재 wrote:

    > > > 네.. 단순히 카운터를 한 값을 그리드에 표현하는 겁니다.

    > > >

    > > > 어떤 회원이 나이가 13세이고 코드가 35이라면

    > > > Stringrid.cells[1,3]:= 1 이되겠습니다.

    > > > 다음에서 같은 조건으로 17세 코드가 38이라면..

    > > > Stringrid.cells[1,3] := 2 가 되겠구요..

    > > > 이렇게 각 값을 누적시켜 나가는 겁니다.

    > > > 회원조건에 따라서 말이죠 다시한번 님께 부탁드립니다.

    > > > 좀 더 상세히 알려주신다면 정말 감사하겠습니다. 부탁드립니다.

    > > >

    > > >

    > > > 정계훈 wrote:

    > > > > 안녕하세요. 우선 답은 아니고요. 정보가 좀 더 필요해서요.

    > > > >

    > > > > 그러니깐 단순히 카운터를 한 값을 스트링그리드에 표현하는 것인가요?

    > > > >

    > > > > 그렇다면 쉽게 나올 수도 있을것 같은데요.

    > > > >

    > > > > 숫자를 표현 한다면 나이를 묶어서 질의하심이...

    > > > >

    > > > > Select No, Cod, 10 Nai, count(*) cnt from HoywonDB

    > > > > where nai between ''11'' and ''20''

    > > > > group by No, Cod

    > > > > union all

    > > > > Select No, Cod, 20 Nai, count(*) cnt from HoywonDB

    > > > > where nai between ''21'' and ''30''

    > > > > group by No, Cod

    > > > > union all

    > > > > Select No, Cod, 30 Nai, count(*) cnt from HoywonDB

    > > > > where nai between ''31'' and ''40''

    > > > > group by No, Cod

    > > > > union all

    > > > > Select No, Cod, 40 Nai, count(*) cnt from HoywonDB

    > > > > where nai between ''41'' and ''50''

    > > > > group by No, Cod

    > > > >

    > > > > 김광재님의 질문을 정확히 이해하지 못해서 더이상 써 내려가면

    > > > > 이상할것 같아서 이만 줄이겠습니다.

    > > > > 약간만 더 부연 설명을 해 주신다면 명확한 답을 드릴수도 있을텐데,

    > > > > 아님 다른 고수들이 명확한 답변을 기둘릴수 밖에요.

    > > > > 죄송합니다.

    > > > >

    > > > > 김광재 wrote:

    > > > > > 각설하고 여쭙겠습니다. 도와주세요..

    > > > > >

    > > > > > 쿼리문을 처음레코드 부터 끝까지 읽어서 각각의 해당항목에 값을 누적시키려고 합니다..

    > > > > > 회원정보를 가지고 있는 DB가 있습니다.(DB Record 갯수는 약 1000건정도입니다.)

    > > > > >

    > > > > > 이 DB에서 회원코드가 10~20이면 A에 누적 시키고(+1...)

    > > > > > 회원코드가 20~30이면 B에 누적 시키고

    > > > > > 회원코드가 30~40이면 C에 누적 시키고

    > > > > > 회원코드가 40~50이면 D에 누적 시키고

    > > > > >

    > > > > > 1000명의 회원은 코드가 반드시 위의 하나에 속해 있습니다.

    > > > > >

    > > > > > 또한 각 회원들을 연령대별로 구분해서 각각의 기억장소에 저장을 합니다

    > > > > >

    > > > > > 이 DB에서 회원나이가 11~20이면 a에 누적 시키고(+1...)

    > > > > > 회원나이가 21~30이면 b에 누적 시키고

    > > > > > 회원나이가 31~40이면 c에 누적 시키고

    > > > > > 회원나이가 41~50이면 c에 누적 시키고

    > > > > > 회원나이가 51~ 이면 d에 누적 시키는

    > > > > >

    > > > > > 그래서 이 누적된 값들을 출력할땐 스트링그리드에

    > > > > >

    > > > > >

    > > > > > 코드10(A) 코드20(B) 코드30(C) 코드40(D) 코드50(E) 계

    > > > > > ------------------------------------------------------------------------

    > > > > > 10대(a) 1 2 5 2 4 14

    > > > > > 20대(b) 2 3 2 1 1 9

    > > > > > 30대(c) 1 1 1 1 1 5

    > > > > > 40대(d) 1 2 5 2 4 14

    > > > > > 50대(e) 2 3 2 1 1 9

    > > > > > ========================================================================

    > > > > > 총계 7 11 15 7 11 51

    > > > > >

    > > > > >

    > > > > > 정말 정보처리기사문제랑 유형이 비슷한 것 같은데여(DB쓰는것 빼면)..

    > > > > > 한달째 이거 하나갖고 헤메고 있습니다.

    > > > > > 제발 이런 소스 있음 좀 부탁드립니다.

    > > > > > 쿼리를 카운트해서 카운트만큼 DB를 읽으면서 한번에 하나씩 누적을 시키려했는데..

    > > > > > 자꾸 뻗어버립니다. 역시 말이 안되는 것 같구여..

    > > > > > 제발 부탁드립니다.

    > > > > >

    > > > >

  • Profile
    김광재 2001.10.18 01:32
    냉무