2013-01-01 21 views
5

में मामला बयान में तुलना ऑपरेटर का उपयोग करने के लिए यह मेरा तालिका डेटा ....कैसे mysql

id days 
----------- 
1 10 
    20 
3 30 
4 25 
5 5 

मैं की तरह

id days resultcolumn 
1 10 less than 10 
2 20 less than 20 
3 30 less than 30 
4 25 less than 30 
5 5 less than 10 

परिणाम चाहते हैं मैं का इस्तेमाल किया है क्वेरी

SELECT id,days, 
    CASE days 
    WHEN days<=10 THEN 'less than 10' 
    WHEN days<=20 THEN 'less than 20' 
    WHEN days<=30 THEN 'less than 30' 
    END AS 'days2' 
FROM calender 
है

लेकिन मुझे परिणाम डेटा मिला जैसे

id days resultcolumn 
1 10 {null} 
2 20 {null} 
3 30 {null} 
4 25 {null} 
5 5 {null} 

mysql में केस स्टेटमेंट के साथ मैं अपना मूल परिणाम कैसे प्राप्त कर सकता हूं?

उत्तर

1

आप CASE ... WHEN निर्माण के बिना यह कर सकते हैं। बस सरल गणित का प्रयोग करें।

SELECT *, 
    CONCAT('less than ', CEIL(`days`/10)*10) AS `resultcolumn` 
FROM `Table1` 

sqlfiddle

में नाकाम रहने से

यह रोकता Branch predication। इसलिए यह faster for large data set होगा।

+0

महान जवाब। यह मेरी मदद की। हर उपयोगी – user1702396

2

तुम बस मामले के बाद के दिनों को दूर करने के लिए है:

SELECT 
    id, 
    days, 
    CASE WHEN days<=10 THEN 'less than 10' 
     WHEN days<=20 THEN 'less than 20' 
     WHEN days<=30 THEN 'less than 30' END AS 'days2' 
FROM calender 
9

इस प्रयास करें:

SELECT 
     id, 
     days, 
     CASE WHEN days<=10 THEN 'less than 10' 
      WHEN days<=20 THEN 'less than 20' 
      WHEN days<=30 THEN 'less than 30' END AS 'days2' 
    FROM calender 
1

इस प्रयास करें:

SELECT id,days, 
    CASE 
     WHEN days<=10 THEN 'less than 10' 
     WHEN days<=20 THEN 'less than 20' 
     WHEN days<=30 THEN 'less than 30' 
    END AS 'resultcolumn' 
FROM calender