Q&A

  • 여러 조건의 SQL을 하나로
다음의 코드를<!--CodeS-->
                    SQL.Text := 'select sum(PLH09) as SUM_M, Count(*) as CNT_M from PLH ' +
                        'where PLH03 = "M" and PLH11 = " "';
                    close;
                    open;
                    SUM_M := FindField('SUM_M').AsInteger;
                    CNT_M := FindField('CNT_M').AsInteger;

                    SQL.Text := 'select sum(PLH09) as SUM_K, Count(*) as CNT_K from PLH ' +
                        'where PLH03 = "K" and PLH11 = " "';
                    close;
                    open;
                    SUM_K := FindField('SUM_K').AsInteger;
                    CNT_K := FindField('CNT_K').AsInteger;

                    SQL.Text := 'select sum(PLH09) as SUM_C, Count(*) as CNT_C from PLH ' +
                        'where Not (PLH03 = "K" or PLH03 = "M") and PLH11 = " "';
                    close;
                    open;
                    SUM_C := FindField('SUM_C').AsInteger;
                    CNT_C := FindField('CNT_C').AsInteger;<!--CodeE-->

중첩 Select로 한줄로 할수 있는 방법은 없는지요?
2  COMMENTS
  • Profile
    정희돈 2005.05.24 01:32
    select a.SUM_M, b.SUM_K, c.SUM_C, a.CNT_M, b.CNT_K, c.CNT_C from (
    select sum(PLH09) as SUM_M, Count(*) as CNT_M from PLH where PLH03 = "M" and PLH11 = " ") a,
    (select sum(PLH09) as SUM_K, Count(*) as CNT_K from PLH where PLH03 = "K" and PLH11 = " ") b,
    (select sum(PLH09) as SUM_C, Count(*) as CNT_C from PLH where Not (PLH03 = "K" or PLH03 = "M") and PLH11 = " ") c

    위와 같이 서브 쿼리로 해주세요 그래야 속도도 많이 빠르죠... DB연결 끊기 다시 연결이런식으로 하면
    속도 문제나 메모리 문제가 있어서 느려집니다.

  • Profile
    황성욱 2005.05.20 00:14
    쿼리를 한방에 가져오는걸로 짜시면 될듯합니다.
    UNION을 사용하시거나 CASE문(mssql),DECODE(오라클)을 사용하여 쿼리를 작성하시면 한번에 나올겁니다. ^^