2017-03-20 4 views
0

제가 할 수있는 한 많은 스택 게시물을 보았습니다.MySQL을 사용하여 Case 문을 사용하여 다음 Qtr을 결정하십시오. (마지막 Qtr이 4 일 때)

필자는 펜 테스트가 예정된 날짜를 포함하는 테이블을 보유하고 있으며 이번 분기 및 다음 분기에 필자에게 펜 테스트를 표시 할 뷰를 작성하고 있습니다. 우리는 4 분기에 다음 분명히 다음 QTR 분명 내가 앞으로 방법은 현재 QTR 인 경우의 "를 사용하는 것입니다 있으리라 믿고있어

존재하지 않는 Q5 될하지 않는 한

SELECT 
    `pen_test_cycle`.`ptc_uid` AS `ptc_uid`, 
    `pen_test_cycle`.`ptc_system` AS `ptc_system`, 
    `pen_test_cycle`.`ptc_cycle` AS `ptc_cycle`, 
    `pen_test_cycle`.`ptc_start_date` AS `ptc_start_date`, 
    QUARTER(`pen_test_cycle`.`ptc_start_date`) AS `Qtr`, 
    `pen_test_cycle`.`ptc_compliance` AS `ptc_compliance`, 
    `inscope_systems`.`iss_uid` AS `iss_uid`, 
    `inscope_systems`.`system_name` AS `system_name`, 
    `inscope_systems`.`system_compliance` AS `system_compliance`, 
    QUARTER(CURDATE()) AS `current Qtr` 
FROM 
    ((`pen_test_cycle` 
    JOIN `inscope_systems` ON ((`pen_test_cycle`.`ptc_system` = `inscope_systems`.`iss_uid`))) 
    JOIN `compliance_standard` ON ((`pen_test_cycle`.`ptc_compliance` = `compliance_standard`.`cs_uid`))) 

    Where QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE()) 

    or 

    QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE())+1 

코드는 잘 작동 (4)는 다음 QTR, 그래서 나는이 (애 여러 가지 다른 시도) 내가 분명히 누군가 경우, 본질적으로 잘못하지만 난 그냥 캔트 문제를 찾을 뭔가를하고 있어요 말하는 것처럼

SELECT 
    `pen_test_cycle`.`ptc_uid` AS `ptc_uid`, 
    `pen_test_cycle`.`ptc_system` AS `ptc_system`, 
    `pen_test_cycle`.`ptc_cycle` AS `ptc_cycle`, 
    `pen_test_cycle`.`ptc_start_date` AS `ptc_start_date`, 
    QUARTER(`pen_test_cycle`.`ptc_start_date`) AS `Qtr`, 
    `pen_test_cycle`.`ptc_compliance` AS `ptc_compliance`, 
    `inscope_systems`.`iss_uid` AS `iss_uid`, 
    `inscope_systems`.`system_name` AS `system_name`, 
    `inscope_systems`.`system_compliance` AS `system_compliance`, 
    QUARTER(CURDATE()) AS `current Qtr`, 
    (CASE QUARTER(`pen_test_cycle`.`ptc_start_date`) 
    WHEN 1 Then 2 
    When 2 Then 3 
    When 3 Then 4 
    WHEN 4 Then 1 
    Else 0 
    End) as nqt 
FROM 
    ((`pen_test_cycle` 
    JOIN `inscope_systems` ON ((`pen_test_cycle`.`ptc_system` = `inscope_systems`.`iss_uid`))) 
    JOIN `compliance_standard` ON ((`pen_test_cycle`.`ptc_compliance` = `compliance_standard`.`cs_uid`))) 

    Where QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE()) 

    or 

    QUARTER(`pen_test_cycle`.`ptc_start_date`) = 'nqt' 

와 함께 1 "유형 문 등장한다 이 작품을 만드는 법을 제안하거나 gr이 될 더 현명한 해결책을 제안 할 수 있습니다. 먹다.

많은 감사

답변

0

당신은 계수 기능을 사용하여 첫 번째 쿼리에 이상적인 솔루션 같은 소리

QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE())+1 

QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE()) % 4 + 1 
+0

로 교체하지만 결과를 제공하지 않습니다 수 예상 함 '코드' QUARTER ('pen_test_cycle'.ptc_start_date') = QUARTER (CURDATE()) 또는| | 12 | 2017년 3월 1일 | 1 | 1 | 1 : 1,363,210 QUARTER ('pen_test_cycle'.'ptc_start_date') = (QUARTER (CURDATE()) + 1) '코드' 다음과 같은 제공합니다 1 | 토스트 | 1 | 1 | 2 2 | 2 | 12 | 2017-04-01 | 2 | 1 | 2 | 버터 | 1 | 1 | 3 3 | 3 | 12 | 2017-01-01 | 1 | 1 | 3 | 빵 | 1 | 1 | 2 '코드' QUARTER ('pen_test_cycle'.'ptc_start_date') = QUARTER (CURDATE()) 또는 QUARTER ('pen_test_cycle'.'ptc_start_date') = (QUARTER (CURDATE()) + 1) % 4 + 1 '코드' –

+0

죄송합니다. 시도해보고 다시 포맷하겠습니다. –

+0

죄송합니다. 내 수식에 오류가있었습니다. 이제는 고쳐야합니다. –