2013-08-06 3 views
0

나는 생각이 잘못되어 길을 잃었으며, 이것에서 풀려하면 오늘 내가있는 곳을 얻었습니다. 여기 ... 도움을 요청합니다.SLA 보고서에 대한 예/아니요 열 만들기

나는 긴 케이스를 구축 할 때 거래의 날짜가 주말을 제외하고, 완료 및 "필수 SLA 날짜"

는 난 할 노력하고있어 만드는 것입니다 그것을 명명되어야 할 때 나에게 말한다 문 트랜잭션이 SLA 날짜 또는 그 전에 완료되었음을 나타내는 열. 또는 아니오, 그것은 후에 완료되었습니다. 내 논리는 "eventCompleteDate는"인 경우라고 ANOTHER 경우 문에서, 아래의 경우 statemtent을 사용하는 것이었다> 필수 SLA는 "예"다른 "없음"(MetSLA로

CASE WHEN Doc IN ('POS', 'Card') 
     THEN CAST(DATEADD(d, CASE DATEPART(dw, DateEntered) 
           WHEN 7 THEN 2 
           WHEN 1 THEN 1 
           ELSE 0 
           END, DateEntered) + (DATEPART(dw, 
                  DATEADD(d, 
                  CASE DATEPART(dw, 
                  DateEntered) 
                  WHEN 7 THEN 2 
                  WHEN 1 THEN 1 
                  ELSE 0 
                  END, DateEntered)) 
                - 2 + 5) % 5 
       + ((DATEPART(dw, DATEADD(d, CASE DATEPART(dw, DateEntered) 
               WHEN 7 THEN 2 
               WHEN 1 THEN 1 
               ELSE 0 
              END, DateEntered)) - 2 + 5) 
       /5) * 7 - (DATEPART(dw, 
             DATEADD(d, 
               CASE DATEPART(dw, 
                  DateEntered) 
                WHEN 7 THEN 2 
                WHEN 1 THEN 1 
                ELSE 0 
               END, DateEntered)) - 2) AS DATE) 
     ELSE CAST(DATEADD(d, CASE DATEPART(dw, DateEntered) 
           WHEN 7 THEN 2 
           WHEN 1 THEN 1 
           ELSE 0 
           END, DateEntered) + (DATEPART(dw, 
                  DATEADD(d, 
                  CASE DATEPART(dw, 
                  DateEntered) 
                  WHEN 7 THEN 2 
                  WHEN 1 THEN 1 
                  ELSE 0 
                  END, DateEntered)) 
                - 2 + 10) % 5 
       + ((DATEPART(dw, DATEADD(d, CASE DATEPART(dw, DateEntered) 
               WHEN 7 THEN 2 
               WHEN 1 THEN 1 
               ELSE 0 
              END, DateEntered)) - 2 + 10) 
       /5) * 7 - (DATEPART(dw, 
             DATEADD(d, 
               CASE DATEPART(dw, 
                  DateEntered) 
                WHEN 7 THEN 2 
                WHEN 1 THEN 1 
                ELSE 0 
               END, DateEntered)) - 2) AS DATE) 
    END AS 'Required SLA Date'  
+2

여기서 질문은 무엇입니까? –

+0

@NenadZivkovic 예, 이벤트가 필요한 슬래이 데이터 (코드 첨부)로 완료되었거나 필수 슬래이 데이터로 완료되지 않았다고 알리는 qry 열을 만들려고합니다. – donviti

+0

@NenadZivkovic 및 감사합니다. 더 읽기 쉽도록 편집하기 위해서입니다. 나는 그 일을하려고하는 행운이 없다. – donviti

답변

2

내가 중첩 된 쿼리를 사용하는 것이 끝 없다 또는 CTE)를 사용하여 로직을 두 번 쓰는 것을 피하십시오.

SELECT RequiredSlaDate, 
     case when RequiredSlaDate > EventCompleteDate then 'NO' 
      else 'YES' 
     end as MetSLA 
FROM 
(
    SELECT EventCompleteDate, 
      CASE WHEN Doc -- etc, etc ... 
      AS RequiredSlaDate 
    FROM Table 
) as Source 
+0

CTE에서 case 문을 수행하는 방법을 파악하고 있다고 생각하지 않으며, from 절의 중첩 된 쿼리에서 case 문을 수행하는 방법을 알지도 못한다. – donviti

+0

@donviti, 위의 예에서 CASE를 사용하여 전체 SELECT를 하위 쿼리에 넣은 다음 *를 선택하여 예/아니요 열을 추가합니다. 나는 CTE 예제 –

+0

을 작성하겠습니다. 아아아! 너 락. 이것은 나를 데려 가고 있었다! 시간! 정말 고맙습니다!!!!! – donviti

2

다음은 CTE 솔루션의 예입니다. 당신이 지금까지 한 전체 쿼리는 CTE 내부에 가고, CTE 선택은 새 열 추가 :

WITH CTE AS 
(
    SELECT CASE WHEN Doc IN ('POS', 'Card') 
       THEN .... --your whole CASE from above goes here, I will not copy/paste 
      END AS [Required SLA Date], 
    eventCompleteDate, 
    YourOtherColumns -- also all other columns you are selecting in your query 
    FROM 
    YourTable 
) 
SELECT *, 
    CASE WHEN eventCompleteDate > [Required SLA Date] THEN 'Yes' ELSE 'No' END AS MetSLA 
FROM CTE 

SQLFiddle VERY Simplified DEMO

PS를 : 또한 인용 부호를 사용하지 않도록주의 AS 'Required SLA Date'과 같이 열의 이름을 지정할 때 대괄호 대신 AS [Required SLA Date]을 입력하십시오. 가독성을 위해 그 밖의 것이 없다면.

+0

열 이름을 변경했습니다. 도와 주셔서 정말 고맙습니다. – donviti