성낙균 님이 쓰신 글 :
: 두개의 테이블이 있습니다.
:
: M10 과 S10 는 Code와 M10Code 라는 필드로 연결되어있습니다.
:
: 문제는 S10의 자료가 중복되어서 날자값이 최대인것을 join하려하는데 에러가 나네요...
:
: Select M.*,S.YMD
: From M10 M
: Left Outer Join ( select m10code,max(ymd) from sa10 group by m10code ) s
: -- left outer join ( select m10code,ymd from sa10) s
: on m.code = s.m10code
:
: 에러내용 :
: Invalid token.
: Dynamic SQL Error.
: SQL error code = -104.
: Invalid command.
: no column name specified for column number 2 in derived table S.
:
: 그래서 Group By 절을빼고 하면 자료가 중복되게 나옵니다.
:
: Select M.*,S.YMD
: From M10 M
: Left Outer Join ( Select m10code,ymd from sa10) s
: on m.code = s.m10code
:
:
: 파이어버드가 조인시 Group By절이 안먹는것같지는 않는데.. 뭐 잘못 한것일까요?
:
: 참고로 이것은 까막님이 비슷한 답변을 주신것을 찾았는데... 제가 쓴구문과 틀린점을 찾을수가 없네요...
: ==================================================================================
: SELECT T1.*
: FROM TBL T1
: INNER JOIN (SELECT Tid ,MAX(Value2) Value2
: FROM TBL
: GROUP BY Tid
: ) T2
: ON (T1.Tid = T2.Tid AND
: T1.Value2 = T2.Value2)
: ===================================================================================
안녕하세요. 까막입니다.
에러 메세지에 답이 보이는데요..
컬럼 넘버 2의 컬럼명이 구체적으로 없다.. 라는 뜻으로 해석이 되네요.
select m10code,max(ymd) from sa10 group by m10code
이걸
select m10code,max(ymd) ymd from sa10 group by m10code
라고 해주시면 되겠네요.
MAX 를 써서 해당 컬럼에 어떠한 조작을 가했으므로 그 이름을 다시 정의를 해줘야 하는 거죠.
어떤 경우이든 컬럼 그대로 사용한게 아니라면 그 이름은 다시 정의를 해줘야 합니다.
혼이 살아 있을까.... 대한민국.
|