2009-05-11 20 views
11

में अन्य स्तंभों के आधार पर मैं यकीन है कि मैं इस कहीं देखा है, लेकिन मैं सही शब्दावली तो मैं समस्या हो रही है नहीं मिल सकता है ...सशर्त स्तंभ MySQL

की मैं मान लीजिए उपयोगकर्ता की जानकारी के साथ एक टेबल है (आइए यह भी मान लें कि यह किसी ऐसे व्यक्ति द्वारा बनाया गया था जो मुझसे अधिक भुगतान करता है, इसलिए स्कीमा को संशोधित करना एक विकल्प नहीं है।) उपयोगकर्ता जानकारी के विभिन्न कॉलम में डीओबी और नौकरी के शीर्षक के लिए कॉलम हैं।

User_id Job_Title DOB 
    joe_1  manager 01/01/1950 
    jim_1 associate 01/01/1970 
jill_1 associate 01/01/1985 
jane_1  manager 01/01/1975 

क्वेरी:: मैं एक प्रश्न है कि, क्या उन स्तंभों में मौजूद है के आधार पर चाहते हैं, एक अतिरिक्त कॉलम "Real_Title" कहा जाता है, उदाहरण के लिए शामिल होंगे

SELECT User_id, Real_Title FROM users 
IF (YEAR(DOB) < 1980 AND Job_Title = "manager") 
    {Real_Title = "Old Fart"} 
ELSE IF (YEAR(DOB) < 1980 AND Job_Title = "associate") 
    {Real_Title = "Old Timer"} 
ELSE IF (YEAR(DOB) > 1980 AND Job_Title = "manager") 
    {Real_Title = "Eager Beaver"} 
ELSE IF (YEAR(DOB) > 1980 AND Job_Title = "associate") 
    {Real_Title = "Slacker"} 

मैं ऊपर पता न केवल है गलत लेकिन वास्तव में अक्षम भी कोडित, लेकिन मैं विचार को पूरा करना चाहता था।

क्या एक ही टेबल में एक या अधिक कॉलम में जानकारी के आधार पर कॉलम पॉप्युलेट करने के लिए, कोई भी तरीका शामिल है, बिना किसी तालिका में?

वर्तमान में मैं उन समूहों में उन परिणामों को चैनल करने के लिए परिणाम प्राप्त करने के बाद PHP स्क्रिप्ट में कुछ उपयोग कर रहा हूं, लेकिन यदि यह क्वेरी में किया जा सकता है, तो यह क्वेरी अन्य स्क्रिप्ट और भाषाओं को पोर्ट कर देगा बहुत आसान।

धन्यवाद!

+1

जन्म तिथि <1980 = पुराने गोज़ ?! – JohnB

+2

मेरी उम्र और नोटिस की जांच करें मैं सबसे अच्छा टाइमर हूं। – Anthony

उत्तर

21
select User_id 
,case 
    when (YEAR(DOB) < 1980 AND Job_Title = "manager") then 'Old Fart' 
    when (YEAR(DOB) < 1980 AND Job_Title = "associate") then 'Old Timer' 
    when (YEAR(DOB) > 1980 AND Job_Title = "manager") then 'Eager Beaver' 
    when (YEAR(DOB) > 1980 AND Job_Title = "associate") then 'Slacker' 
    else 'nobody' 
end 
as Real_Title 
from users 
14

अगर मैं सही ढंग से समझ, मुझे लगता है कि आप CASE statement लिए देख रहे हैं:

SELECT User_id, 
     (CASE 
      WHEN YEAR(DOB) < 1980 AND Job_Title = "manager" THEN "Old Fart" 
      WHEN YEAR(DOB) < 1980 AND Job_Title = "associate" THEN "Old Timer" 
      ... 
      ELSE "Unknown Title" 
     END) AS Real_Title 
FROM users; 
संबंधित मुद्दे