인터넷에서 찾아본 결과 건우아빠 님께서 참고하라고 한 쿼리가 있는데
SELECT A.USER_NM, B.DEPT_NM, C.MTYPE_NM AS POST_NM, A.CP_NUM, (D.ADDR + D.DETAIL_ADDR) AS ADDR, A.JOIN_DT,
E.PLANT_NM, E.PLANT_NO,
(
SELECT
CONVERT(INTEGER, (mb/12)) AS term_year
,DATEDIFF(MM,DATEADD (MM, 12 * CONVERT(integer, mb / 12 ), term_year), getdate()) AS term_month
,CONVERT(INTEGER, getdate() - DATEADD(mm , CONVERT(INTEGER, mb) , term_year )) AS term_day
FROM (SELECT '2012-02-02' term_year, DATEDIFF(mm, '2012-02-02', getdate()) AS mb) AS term
) AS TERM
FROM TB_ASERPZA03 A
JOIN TB_ASERPZA02 B ON A.DEPT_CD = B.DEPT_CD
JOIN TB_ASERPZB04 C ON A.POST_CD = C.TYPE_CD
LEFT JOIN TB_ASERPIA01 D ON A.USER_ID = D.USER_ID
LEFT JOIN TB_ASERPZA01 E ON 1=1
WHERE A.USER_ID = '20130802'
중간에 SELECT 부분입니다. 근속년수를 구하는건데 년,월,일 을 출력하게 되있습니다. XX년 XX월XX일
근데 쿼리가 잘못된건 알겠는데 도무지 뭔지 모르겠어요ㅠㅠ
하위 쿼리를 EXISTS로 정의하지 않은 경우에는 SELECT 목록에서 식을 하나만 지정할 수 있습니다. 이에러가 뜨네요..
그리고 근속년수를 구하는건 저런식으로 하면 되는건가요?
Comment 1
-
건우아빠
2014.01.15 13:43
근속년수는 회사마다 규정이 조금씩 다를수 있습니다.
내부 직원의 근속년수는 복지나 승진등 업무에서 참고 합니다.
일까지는 안하고 월로 끊게 됩니다. 회사 규정에 맞게 처리하시면 될듯 합니다 .
E.PLANT_NO,
(
SELECT
CONVERT(INTEGER, (mb/12)) AS term_year
,DATEDIFF(MM,DATEADD (MM, 12 * CONVERT(integer, mb / 12 ), term_year), getdate()) AS term_month
,CONVERT(INTEGER, getdate() - DATEADD(mm , CONVERT(INTEGER, mb) , term_year )) AS term_day
FROM (SELECT '2012-02-02' term_year, DATEDIFF(mm, '2012-02-02', getdate()) AS mb) AS term
) AS TERM
스칼라서브쿼리로 이용된
이 부분에서 반환하는 컬럼이 하나여야 하는데 3개의 컬럼을 반환합니다.
이때는 세개의 컬럼을 붙여서(+) 하나로 하시던가...
2008이시니 cross apply를 이용해서 서브쿼리 부분은 리턴 받으시는것도 가능 합니다.