Q&A

  • Query1의 결과전체를 Query2의 입력값(from절)으로 사용 ?
두개의 Query를 이용하여

첫번째 Query1의 결과를 Query2의 입력값으로 쓰고자합니다. 즉 Query1의 특정 필드를

사용하는것이 아니고 전체 결과를 Query2의 입력값(from 절 안으로)으로 하고자합니다.



예를 들면 아래 간단한 예제가 있습니다.



...

Query1.Open;

// Query1의 결과값 생성



with Query2 do begin

Clear;

SQL.Add('SELECT count(*) from Query1');

<----> 이부분

Open;

end;



while 또는 repeat문등을 사용하지 않고 바로 사용하고자 합니다.

물론 위 예에서 단순히 count만을 하려고 하는것은 아니고 다양한 작업을 위한것입니다.



답변을 부탁드립니다..^^





6  COMMENTS
  • Profile
    프리남 2000.12.30 01:12
    질문과 답을 계속해서 보니 님의 질문만 보면 분명히 Inline View가 맞는것 같습니다. (좁은 소견)

    다만 Query1이 상황에 따라 Where조건이 변하는 것때문에 고민하시는 것같은데...



    이렇게 해보시면 어떨까요!



    with query1 do

    begin

    close;

    sql.clear;

    sql.add('SELECT FLD1, FLD2, FLD3 ');

    sql.add(' FROM TABLE1 ');



    if (조건1) then

    sql.add(' WHERE FLD1 = ''' + edit1.text + ''' ') --> parameter를 쓰지 마시고...

    else

    sql.add(' WHERE FLD2 = ''' + edit2.text + ''' ');

    open;

    end;



    with query2 do

    begin

    close;

    sql.clear;

    sql.add('SELECT COUNT(*), SUM(FLD3) ');

    sql.add(' FROM (' + query1.sql.text + ') ');

    ... 기타 필요한 where

    open;

    end;



    와 같이 표현하면 될 것 같은데... (아닌가여?)



    중요한 것은 query1에서 대입변수를 :param1 처럼 쓰시면 않된다는 점이져..



    :param1 대신 ''' + 필요한 값을 직접 + ''' ...처럼 쓰셔야 됩니다.

    왜 ''' 가 필요하냐면 필요한 값을 상수로 쓸려고 하기 때문에 문자열은 앞과 뒤에 ' 가 필요하져.



    오라클은 되는데 ...

    다른 DB는 않서봐서리.....



    짧은 지식에 도움이 될라나 몰것내여.

    수고하세여.....................^_______________^







  • Profile
    뿌요 2000.12.28 19:19
    안녕하세요..

    Query2가 단지 count를 알기 위함이라면 Query2를 만들필요없이

    cnt := Query1.RecordCount;

    이렇게 할수 있는데.. 다른 뜻이 있다면 다시 올려주세요.. 즐코..





    박인우 wrote:

    > 두개의 Query를 이용하여

    > 첫번째 Query1의 결과를 Query2의 입력값으로 쓰고자합니다. 즉 Query1의 특정 필드를

    > 사용하는것이 아니고 전체 결과를 Query2의 입력값(from 절 안으로)으로 하고자합니다.

    >

    > 예를 들면 아래 간단한 예제가 있습니다.

    >

    > ...

    > Query1.Open;

    > // Query1의 결과값 생성

    >

    > with Query2 do begin

    > Clear;

    > SQL.Add('SELECT count(*) from Query1');

    > <----> 이부분

    > Open;

    > end;

    >

    > while 또는 repeat문등을 사용하지 않고 바로 사용하고자 합니다.

    > 물론 위 예에서 단순히 count만을 하려고 하는것은 아니고 다양한 작업을 위한것입니다.

    >

    > 답변을 부탁드립니다..^^

    >

    >

  • Profile
    병부잡이 2000.12.22 07:59
    select * from (select aaa,bb,cc from tableName ) where condition

    과 같이 인라인뷰를 사용하시면 됩니다

    이렇게 하시면 aaa,bb,cc 로 걸러진 값에대해서만 conditon으로 쿼리를 하죠...

    인라인뷰는 왠만한 디비에서는 다 지원됩니다



    > ...

    > Query1.Open;

    > // Query1의 결과값 생성

    >

    > with Query2 do begin

    > Clear;

    > SQL.Add('SELECT count(*) from Query1');

    > <----> 이부분

    > Open;

    > end;

    >

    > while 또는 repeat문등을 사용하지 않고 바로 사용하고자 합니다.

    > 물론 위 예에서 단순히 count만을 하려고 하는것은 아니고 다양한 작업을 위한것입니다.

    >

    > 답변을 부탁드립니다..^^

    >

    >

  • Profile
    박인우 2000.12.22 23:31
    답변은 감사드림니다만 ..^^

    제가 하고 싶은것은 제가 질문한 그대로의 내용입니다.

    왜냐하면 Query1에서 받아오는 Table이 하나고 아니고 여러개이며

    case에 따라 다양한 결과를 Query1에서 생성하고자하는 겁니다.

    그리고 이렇게 생성된 Query1의 결과를 갖고서 Query2에서 동일한 작업

    (예를 들어 sum, count, 등등)을 할려고 하는거지요.



    만일 님처럼 할려면 각각에 모두 인라인뷰를 써야하는데 ..^^

    조금 복잡할거 같아서 질문을 드렸습니다.

    다시한번 답변에 감사드리고 아래분이 답변을 올려주셨네요.



    병부잡이 wrote:

    > select * from (select aaa,bb,cc from tableName ) where condition

    > 과 같이 인라인뷰를 사용하시면 됩니다

    > 이렇게 하시면 aaa,bb,cc 로 걸러진 값에대해서만 conditon으로 쿼리를 하죠...

    > 인라인뷰는 왠만한 디비에서는 다 지원됩니다

    >

    > > ...

    > > Query1.Open;

    > > // Query1의 결과값 생성

    > >

    > > with Query2 do begin

    > > Clear;

    > > SQL.Add('SELECT count(*) from Query1');

    > > <----> 이부분

    > > Open;

    > > end;

    > >

    > > while 또는 repeat문등을 사용하지 않고 바로 사용하고자 합니다.

    > > 물론 위 예에서 단순히 count만을 하려고 하는것은 아니고 다양한 작업을 위한것입니다.

    > >

    > > 답변을 부탁드립니다..^^

    > >

    > >

  • Profile
    컴맹... 2000.12.22 02:30
    그건 간단합니다...



    Query1 에 DataSouce를 하나 연결 시키구여...



    Query2 의 DataSouce Property에 Query1 에 연결한

    DataSouce를 연결 시키면 됩니다..



    나머지는 똑같이 쓰시면 되구여...



    그럼 이만...



    박인우 wrote:

    > 두개의 Query를 이용하여

    > 첫번째 Query1의 결과를 Query2의 입력값으로 쓰고자합니다. 즉 Query1의 특정 필드를

    > 사용하는것이 아니고 전체 결과를 Query2의 입력값(from 절 안으로)으로 하고자합니다.

    >

    > 예를 들면 아래 간단한 예제가 있습니다.

    >

    > ...

    > Query1.Open;

    > // Query1의 결과값 생성

    >

    > with Query2 do begin

    > Clear;

    > SQL.Add('SELECT count(*) from Query1');

    > <----> 이부분

    > Open;

    > end;

    >

    > while 또는 repeat문등을 사용하지 않고 바로 사용하고자 합니다.

    > 물론 위 예에서 단순히 count만을 하려고 하는것은 아니고 다양한 작업을 위한것입니다.

    >

    > 답변을 부탁드립니다..^^

    >

    >

  • Profile
    박인우 2000.12.22 23:43
    답변 감사드립니다만 역쉬나 에러가 발생합니다.

    간단한 예제를 하나더 올리면 ..

    에러나는 부분은 바로 ' <-- '부분입니다.



    에러메세지는 query1이라는 table이 없다는 에러입니다.



    ========================================================================

    with query1 do begin

    SQL.Clear;

    SQL.Add('select * from dw_sales') ;

    Open;

    end;

    with query2 do begin

    SQL.Clear;

    SQL.Add('select * from query1') ; (<-- 여기 from절 에서)

    Open;

    end;

    ========================================================================

    덧분여서 query1은 이미 DB에 연결이 된 상태이고 정상적으로 작동을 하고

    문제는 query2에서 from절에 query1을 사용하는 방법입니다.

    다시 한번만 더 답변을 부탁드립니다..^^



    컴맹... wrote:

    > 그건 간단합니다...

    >

    > Query1 에 DataSouce를 하나 연결 시키구여...

    >

    > Query2 의 DataSouce Property에 Query1 에 연결한

    > DataSouce를 연결 시키면 됩니다..

    >

    > 나머지는 똑같이 쓰시면 되구여...

    >

    > 그럼 이만...

    >

    > 박인우 wrote:

    > > 두개의 Query를 이용하여

    > > 첫번째 Query1의 결과를 Query2의 입력값으로 쓰고자합니다. 즉 Query1의 특정 필드를

    > > 사용하는것이 아니고 전체 결과를 Query2의 입력값(from 절 안으로)으로 하고자합니다.

    > >

    > > 예를 들면 아래 간단한 예제가 있습니다.

    > >

    > > ...

    > > Query1.Open;

    > > // Query1의 결과값 생성

    > >

    > > with Query2 do begin

    > > Clear;

    > > SQL.Add('SELECT count(*) from Query1');

    > > <----> 이부분

    > > Open;

    > > end;

    > >

    > > while 또는 repeat문등을 사용하지 않고 바로 사용하고자 합니다.

    > > 물론 위 예에서 단순히 count만을 하려고 하는것은 아니고 다양한 작업을 위한것입니다.

    > >

    > > 답변을 부탁드립니다..^^

    > >

    > >