2009-05-27 15 views
9

मैं एक मेज है कि मैं Col3यह पता लगाने के लिए कि COALESCE ऑपरेटर किस कॉलम/मान को सफलतापूर्वक चुना गया है?

को

नोट Col2 को Col1 के साथ शुरू प्रत्येक आईडी तो तब के लिए 3 से पहले गैर-शून्य मान (और केवल 3) कॉलम मिलेंगे करना चाहते हैं: Col3 कभी शून्य है

ID Col1 Col2 Col3 
------------------------------ 
1  A  B  X 
2  NULL C  X 
3  NULL NULL X 
4  D  NULL X 

प्रत्येक मान मैं निम्नलिखित एसक्यूएल चुनें

SELECT ID, 
      COALESCE(Col1, Col2, Col3) AS Col 
FROM  MyTable 

जो निम्नलिखित वापस आती है और अभी ठीक काम करता है का उपयोग करने के लिए सही स्तंभ प्राप्त करने के लिए

ID Col 
------------- 
1  A 
2  C 
3  X 
4  D 

जो मैं चाहता हूं वह तीसरा कॉलम लौटाता है यह इंगित करता है कि कोलेसे किस कॉलम पर सफल रहा था। निम्नलिखित परिणाम सेट है जो मैं तैयार करना चाहता हूं:

ID Col Source 
----------------------- 
1  A  Col1 
2  C  Col2 
3  X  Col3 
4  D  Col1 

उत्तर

16

शायद यह काम करेगा?

SELECT ID, 
      COALESCE(Col1, Col2, Col3) AS Col, 
      CASE COALESCE(Col1, Col2, Col3) 
       WHEN Col1 THEN 'Col1' 
       WHEN Col2 THEN 'Col2' 
       WHEN Col3 THEN 'Col3' 
       ELSE 'Unknown' 
      END AS Source 
FROM  MyTable 
+0

सुंदर। यह इतना आसान समाधान है जो सही समझ में आता है। धन्यवाद। –

संबंधित मुद्दे