할루 고수님덜...^^;; 안뇽 하신가여...
지금여 지가 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.입고일자)');
> 할루 고수님덜...^^;; 안뇽 하신가여...
> 지금여 지가 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