쿼리 질문 T-T 0 5 1,629

by RedOri [SQLServer] [2015.04.29 16:23:02]


SELECT 
                (SELECT codi_id FROM OCS_CUSTOMER WHERE chart_id = A.chart_id) AS class,
                    SUM(ISNULL(A.cash_amount, 0) + ISNULL(A.card_amount, 0) + ISNULL(A.account_amount, 0)) AS amount
            FROM OCS_INCOME A
            WHERE A.hospital_code = 'MS02'
            AND A.income_date = :income_date
            GROUP BY A.chart_id

 

위와 같은 쿼리에서 class가 'shinbee430' 인 경우 파라미터값인 (:income_date) 날짜와 특정날짜와 (ex '2015-02-07' )

비교하여 특정날짜보다 :income_date날짜가 12달보다 작다면 amount에 0을 크다면 정상적으로 위의 sum을 하려면 쿼리

를 어떻게 바꿔야 할까요 ㅡ_ㅡ;;; 쿼리에서 특정날짜 및 shinbee430 는 고정입니다.

by 개발뉴비 [2015.04.29 16:41:13]

1. 어느 테이블에 class라는 컬럼이 있나요?

2. ':income_date날짜가 12달보다 작다면' 이란 말이 1년이상 차이가 나지 않는다면 이라는 뜻인가요?

질문을 하실때 답변자가 알아보기 쉽도록 쿼리보다는 각 테이블의 데이터 정보와 결과정보를 표 형태로 보여주시면 답변자가 알아보기가 수월합니다.


by 개발뉴비 [2015.04.29 16:43:28]

class는 sum정보였네요... 난독증.......


by RedOri [2015.04.29 16:57:38]

1. class는 OCS_CUSTOMER 에서 가져온 codi_id 입니다.

2. 고정날짜인 '2015-02-07' 와 파라미터로 받은 :income_date의 1년전 날짜를 비교하는게 맞을거같습니다.

 


by 개발뉴비 [2015.04.29 17:48:01]

이런... 오라클인줄 알고 답변 드렸는데... SQL Server네요... 

어쩐지.. ISNULL이 뭔가 했네...;;;;;


by 개발뉴비 [2015.04.29 17:57:40]
-- MS-SQL에서는 이렇게 할수 있네요
SELECT 
      B.codi_id
    , (CASE WHEN CONVERT(DATETIME, '2015-02-07') < DATEADD(YEAR, -1, :income_date) THEN 0
            ELSE SUM(ISNULL(A.cash_amount, 0) + ISNULL(A.card_amount, 0) + ISNULL(A.account_amount, 0))
      END) AS amount
FROM OCS_INCOME A
LEFT JOIN OCS_CUSTOMER B
    ON A.chart_id = b.chart_id
WHERE A.hospital_code = 'MS02'
  AND A.income_date = :income_date
  AND B.codi_id = 'shinbee430'
GROUP BY A.chart_id, B.codi_id;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입