Q&A

  • SQL문좀 봐주시와여... SELECT문인디 에러가 흑흑~
할루 고수님덜...^^;; 안뇽 하신가여...

지금여 지가 VB로 된걸 델루 포팅중인디여..

아래의 SQL문은 억세스에서 돌아가던 SQL문입니다...

그런디.. 이상하게두 First에서 에러가 난는군요 ㅠㅠ First이게 먼가요??

그리고 Having절을 사용안할려면 어떻게 바꿔야 하는지요... 아시는 분덜은

리플달아 주시와여 ^^ 구람 미리 감솨여 ^^;;



sql.add('SELECT DISTINCT First(a.제품명) as 제품명, First(a.고객명) AS 고객명,');

sql.Add('First(a.접속방식) AS 접속방식,First(b.제조번호) AS 제조번호,');

sql.Add('b.입고번호, First(b.입고일자) AS 입고일자, First(b.sw_rev) AS f_sw_rev,');

sql.add('First(b.hw_rev) AS f_hw_rev, Count(b.제조번호) AS cnt ');

sql.add('FROM 고객시방명세 as a INNER JOIN 제품입고 as b ');

sql.add('ON a.시방코드 = b.시방코드');

sql.add('GROUP BY b.입고번호');

sql.Add('HAVING (((First(a.제품명)) Like '''+combobox1.Text+'%'') AND');

sql.Add('((First(b.입고일자)) Between :now1 And :now2))');

sql.add('ORDER BY First(a.제품명), First(b.제조번호), First(b.입고일자)');

4  COMMENTS
  • Profile
    김광섭 2001.03.17 01:50
    사발우성 wrote:

    > 할루 고수님덜...^^;; 안뇽 하신가여...

    > 지금여 지가 VB로 된걸 델루 포팅중인디여..

    > 아래의 SQL문은 억세스에서 돌아가던 SQL문입니다...

    > 그런디.. 이상하게두 First에서 에러가 난는군요 ㅠㅠ First이게 먼가요??

    > 그리고 Having절을 사용안할려면 어떻게 바꿔야 하는지요... 아시는 분덜은

    > 리플달아 주시와여 ^^ 구람 미리 감솨여 ^^;;

    >

    > sql.add('SELECT DISTINCT First(a.제품명) as 제품명, First(a.고객명) AS 고객명,');

    > sql.Add('First(a.접속방식) AS 접속방식,First(b.제조번호) AS 제조번호,');

    > sql.Add('b.입고번호, First(b.입고일자) AS 입고일자, First(b.sw_rev) AS f_sw_rev,');

    > sql.add('First(b.hw_rev) AS f_hw_rev, Count(b.제조번호) AS cnt ');

    > sql.add('FROM 고객시방명세 as a INNER JOIN 제품입고 as b ');

    > sql.add('ON a.시방코드 = b.시방코드');

    > sql.add('GROUP BY b.입고번호');

    > sql.Add('HAVING (((First(a.제품명)) Like '''+combobox1.Text+'%'') AND');

    > sql.Add('((First(b.입고일자)) Between :now1 And :now2))');

    > sql.add('ORDER BY First(a.제품명), First(b.제조번호), First(b.입고일자)');



    제가 ms-sql에서 위에서 쓰인 쿼리문과 유사하게 테스트 해봤습니다.

    inner join인 경우는 형식이 pc db에서는

    테이블1 inner join 테이블2 on 테이블1.필드1 = 테이블2.필드1

    ms-sql에서는 단순히

    where 절에서 테이블1.필드1 = 테이블2.필드1

    이렇게만 해줘도 같은 결과가 나옵니다.

    위에것은 밑에것의 ansi sql로 표현하자면 그렇게 됩다는 것입니다.



    매번의 필드앞에 first를 붙였는데... --> 이 의미가 제 생각으론 쿼리중 처음것을 가져온다는 말인것 같아서 이것 ms-sql로는 top 1이라고 하면 됩니다만 확실치는 않네요 --;



    having 절에서 제가 의문나는 것은 like를 썼는데

    combobox에서는 선택만 할것같은데 왜 like 를 썼는지...



    마지막으로 Distinct 하고 group by절을 함께 썼는데 의미는 둘다 동일해서 하나만 쓰면 되는데 두개를 동시에 썼네요.(둘다 써두 되긴하지만) 그리고 group by절에서는 select한 컬럼을 다 써주야하는데 위에서는 하나만 있는데두 잘된다는 것이 이상하네요. pc db에서만 되는것인지는 확실치 않네요.



    다음은 제 설명이 부족할꺼 같아서 덧붙인 예제입니다.



    select distinct top (a.lensitem), b.name inDate

    from tbinfile a, tblensitem b

    where a.lensitem = b.lensitem

    --group by a.lensitem, b.name <-- 이부분을 넣는다면 select에서 Distinct를 삭제

    having b.name like 'cr%'

    order by b.name

  • Profile
    사발우성 2001.03.16 01:30
    김광섭 wrote:

    > 사발우성 wrote:

    > > 할루 고수님덜...^^;; 안뇽 하신가여...

    > > 지금여 지가 VB로 된걸 델루 포팅중인디여..

    > > 아래의 SQL문은 억세스에서 돌아가던 SQL문입니다...

    > > 그런디.. 이상하게두 First에서 에러가 난는군요 ㅠㅠ First이게 먼가요??

    > > 그리고 Having절을 사용안할려면 어떻게 바꿔야 하는지요... 아시는 분덜은

    > > 리플달아 주시와여 ^^ 구람 미리 감솨여 ^^;;

    > >

    > > sql.add('SELECT DISTINCT First(a.제품명) as 제품명, First(a.고객명) AS 고객명,');

    > > sql.Add('First(a.접속방식) AS 접속방식,First(b.제조번호) AS 제조번호,');

    > > sql.Add('b.입고번호, First(b.입고일자) AS 입고일자, First(b.sw_rev) AS f_sw_rev,');

    > > sql.add('First(b.hw_rev) AS f_hw_rev, Count(b.제조번호) AS cnt ');

    > > sql.add('FROM 고객시방명세 as a INNER JOIN 제품입고 as b ');

    > > sql.add('ON a.시방코드 = b.시방코드');

    > > sql.add('GROUP BY b.입고번호');

    > > sql.Add('HAVING (((First(a.제품명)) Like '''+combobox1.Text+'%'') AND');

    > > sql.Add('((First(b.입고일자)) Between :now1 And :now2))');

    > > sql.add('ORDER BY First(a.제품명), First(b.제조번호), First(b.입고일자)');

    >

    > 제가 ms-sql에서 위에서 쓰인 쿼리문과 유사하게 테스트 해봤습니다.

    > inner join인 경우는 형식이 pc db에서는

    > 테이블1 inner join 테이블2 on 테이블1.필드1 = 테이블2.필드1

    > ms-sql에서는 단순히

    > where 절에서 테이블1.필드1 = 테이블2.필드1

    > 이렇게만 해줘도 같은 결과가 나옵니다.

    > 위에것은 밑에것의 ansi sql로 표현하자면 그렇게 됩다는 것입니다.

    >

    > 매번의 필드앞에 first를 붙였는데... --> 이 의미가 제 생각으론 쿼리중 처음것을 가져온다는 말인것 같아서 이것 ms-sql로는 top 1이라고 하면 됩니다만 확실치는 않네요 --;

    >

    > having 절에서 제가 의문나는 것은 like를 썼는데

    > combobox에서는 선택만 할것같은데 왜 like 를 썼는지...

    >

    > 마지막으로 Distinct 하고 group by절을 함께 썼는데 의미는 둘다 동일해서 하나만 쓰면 되는데 두개를 동시에 썼네요.(둘다 써두 되긴하지만) 그리고 group by절에서는 select한 컬럼을 다 써주야하는데 위에서는 하나만 있는데두 잘된다는 것이 이상하네요. pc db에서만 되는것인지는 확실치 않네요.

    >

    > 다음은 제 설명이 부족할꺼 같아서 덧붙인 예제입니다.

    >

    > select distinct top (a.lensitem), b.name inDate

    > from tbinfile a, tblensitem b

    > where a.lensitem = b.lensitem

    > --group by a.lensitem, b.name <-- 이부분을 생략한다면 select에서 Distinct를 삭제

    > having b.name like 'cr%'

    > order by b.name

  • Profile
    장동민 2001.03.15 21:47
    distinct 와 first와 함께 쓸수 있는가?

    저는 주로 ms-office를 주로 사용하는데 이 질이어는 않되는 것으로 알고 있습니다.

    ---

    사발우성 wrote:

    > 할루 고수님덜...^^;; 안뇽 하신가여...

    > 지금여 지가 VB로 된걸 델루 포팅중인디여..

    > 아래의 SQL문은 억세스에서 돌아가던 SQL문입니다...

    > 그런디.. 이상하게두 First에서 에러가 난는군요 ㅠㅠ First이게 먼가요??

    > 그리고 Having절을 사용안할려면 어떻게 바꿔야 하는지요... 아시는 분덜은

    > 리플달아 주시와여 ^^ 구람 미리 감솨여 ^^;;

    >

    > sql.add('SELECT DISTINCT First(a.제품명) as 제품명, First(a.고객명) AS 고객명,');

    > sql.Add('First(a.접속방식) AS 접속방식,First(b.제조번호) AS 제조번호,');

    > sql.Add('b.입고번호, First(b.입고일자) AS 입고일자, First(b.sw_rev) AS f_sw_rev,');

    > sql.add('First(b.hw_rev) AS f_hw_rev, Count(b.제조번호) AS cnt ');

    > sql.add('FROM 고객시방명세 as a INNER JOIN 제품입고 as b ');

    > sql.add('ON a.시방코드 = b.시방코드');

    > sql.add('GROUP BY b.입고번호');

    > sql.Add('HAVING (((First(a.제품명)) Like '''+combobox1.Text+'%'') AND');

    > sql.Add('((First(b.입고일자)) Between :now1 And :now2))');

    > sql.add('ORDER BY First(a.제품명), First(b.제조번호), First(b.입고일자)');

  • Profile
    사발우성 2001.03.15 22:34
    님 일단 답변감솨 ㅠㅠ MS-SQL로 고칠려구 하는데 어떤식으로 해야 하나요???

    그건 억세스꺼거든요 ㅠㅠ

    아시면 가르쳐 주시와여.. 억세스에선 잘도라가던 소스임당. ㅠㅠ