2017-01-20 14 views
1

以下のケースステートメントに「年の範囲」を追加するにはどうすればよいですか?私は、 "INTERVAL 6 YEAR" & "INTERVAL 5 YEAR"基準を修正する必要があります。ここで 私のケースステートメントに「年の範囲」を追加するには

は私がモデル化する必要がある基準です:その後、14

その後、11

場合は6〜10年、

5〜1であれば年11+年であれば、その後、18

CASE WHEN hiredate < DATE_SUB(NOW(),INTERVAL 11 YEAR) 
THEN '18' 
WHEN hiredate < DATE_SUB(NOW(),INTERVAL 6 YEAR) 
THEN '14' 
WHEN hiredate < DATE_SUB(NOW(),INTERVAL 5 YEAR) 
THEN '11' 
ELSE '0' END AS Non_Management_Accrual 
+0

「インターバル5年」を「インターバル1年」に変更します。 – Barmar

答えて

1

DATEDIFFメソッドを使用して、2日間の日数を計算し、365で除算してyearsを得ることができます。これらに基づいて、例えば、case声明を書くことができます。:

SELECT id, CASE WHEN FLOOR(DATEDIFF(NOW(), hiredate)/365) < 1 
THEN '0' 
WHEN FLOOR(DATEDIFF(NOW(), hiredate)/365) < 6 
THEN '11' 
WHEN FLOOR(DATEDIFF(NOW(), hiredate)/365) < 11 
THEN '14' 
ELSE '18'  
END AS Non_Management_Accrual 
FROM emp; 

をここSQL Fiddleです。

+0

返信いただきありがとうございます! – jlig

+0

問題を解決するのに役立ちましたか? –

+0

ダルシャンは、それを日の視点から見ると、今後もっと多くの選択肢を与え、素晴らしい仕事をしてくれます! もう1つ質問:従業員が管理(1〜5歳の場合は14、6歳以上の場合は18) - 私は "reportsToID"と同じtblUsersにフィールドを保存しますこれはマネージャのIDです。 – jlig

0

Darshan、MySQL側でビューを作成して、上のコードのFROMステートメントにビューを追加しました。これは私に正しい出力を与えました。ありがとう。

<!--- Create the Manager Monthly Accruals (Mgt) dataset ---> 
    <cfquery name="rsLeaveTimeManagerAccruals" datasource="care"> 
SELECT username, status, active, email, hiredate, tblUsers.picture AS eP 
, TIMESTAMPDIFF(YEAR, hiredate, NOW()) AS year_passed 
, TIMESTAMPDIFF(MONTH, hiredate, NOW()) MOD 12 AS month_passed 
, TIMESTAMPDIFF(DAY, hiredate, NOW()) MOD 365 AS day_passed 
, CONCAT(TIMESTAMPDIFF(YEAR, hiredate, NOW())," years, ",TIMESTAMPDIFF(MONTH, hiredate, NOW()) MOD 12," months, ",TIMESTAMPDIFF(DAY, hiredate, NOW()) MOD 365," days") AS EmployLengthActive 
, TIMESTAMPDIFF(YEAR, hiredate, NOW()) AS monthly_accrual_time 

, CASE WHEN FLOOR(DATEDIFF(NOW(), hiredate)/365) < 1 
THEN '0' 
WHEN FLOOR(DATEDIFF(NOW(), hiredate)/365) <= 5 
THEN '14' 
WHEN FLOOR(DATEDIFF(NOW(), hiredate)/365) >= 6 
THEN '18' 
END AS Management_Accrual 


FROM  v_reports_to_mgt_list LEFT OUTER JOIN tblusers ON tblusers.ID = v_reports_to_mgt_list.id 
WHERE  clr_accrual = '1' AND hiredate IS NOT NULL 
ORDER BY hiredate 
</cfquery> 
+0

もう1つ: "1年"の代わりに "2ヶ月"にこの行を変更する方法は? "1年"の代わりに "2ヶ月"に変更する方法は? "WHEN(DATEDIFF(NOW()、hiredate)/ 365)<1 THEN '0' – jlig

+0

@DarshanMehtaフロア(DATEDIFF(NOW()、hiredate)/ 365)<1 THEN '0' – jlig

関連する問題