2010-07-26 22 views
10

मैं इसएक विशिष्ट एक और स्तंभ के मूल्य के आधार पर स्तंभ का चयन करें

ID | Type | Val0 | Val1 
1 | 0 | A | NULL 
2 | 1 | NULL | B 

मैं Val0 चयन करने के लिए जब प्रकार 0 है की जरूरत है, और Val1 जब टाइप 1 है, और ValN की तरह एक तालिका प्रकार एन है जब है ...

मैं यह कैसे कर सकता हूं? (क्योंकि यह डुप्लिकेट को हटा)

SELECT a.val0 
    FROM TABLE a 
WHERE a.type = 0 
UNION ALL 
SELECT a.val1 
    FROM TABLE a 
WHERE a.type = 1 
UNION ALL ... 

यूनिअन सभी डुप्लिकेट को दूर नहीं करता, और संघ की तुलना में तेजी है:

+0

क्या आप अपेक्षित आउटपुट का नमूना प्रदान कर सकते हैं? –

+0

'चुनें ... जहां आईडी = 1 - ए' – BrunoLM

+0

बस एक त्वरित टिप्पणी: यदि आपके पास इस तरह की सारणी है, तो आपको वास्तव में एक अलग स्कीमा पर विचार करना चाहिए। आपका डेटाबेस लगभग निश्चित रूप से इकाई-संबंध मॉडल का पालन नहीं करता है। – Borealid

उत्तर

15
SELECT CASE 
      WHEN Type = 0 THEN Val0 
      WHEN Type = 1 Then Val1 
      . 
      . 
      WHEN Type = N Then ValN 
     END 
    FROM tbl 
+0

यह स्पष्ट रूप से एक समस्या है हालांकि यदि आप किसी अन्य डेटाबेस से किसी तालिका का उपयोग कर रहे हैं, क्योंकि स्पष्ट रूप से एसक्यूएल सर्वर 10 की अधिकतम संख्या लागू करता है ... जो कि बहुत छोटा है। – eidylon

3

तरह से मैं इस पढ़ा है, आप यूनिअन उपयोग करने के लिए की जरूरत है।

यह गतिशील रूप से करना संभव है।

+0

मैंने इसे "दिए गए प्रकार के आधार पर मुझे एक मूल्य वापस देने" के रूप में व्याख्या की। लेकिन आप पूरी तरह से सही हो सकता है। अपेक्षित आउटपुट मांगना अच्छा था :)। – dcp

+0

@ डीसीपी: मुझे अपनी ग़लत धारणाओं में कई बार काट दिया गया है - मैं यह देखने के लिए पूछता हूं और इंतजार करता हूं कि यह किसी और के लिए समझ में आया है –

2

एन की कम मूल्यों के लिए, आप यह तदर्थ CASE statement का उपयोग कर, CASE Type WHEN 0 THEN Val0 WHEN 1 THEN Val1 END की तरह कर सकते हैं। यदि आपका एन बड़ा है, तो आपको शायद अपने डेटाबेस को सामान्य बनाना चाहिए (यानी एक अलग तालिका में आईडी => वैलएन मैपिंग डालें)।

+0

CASE कथन अच्छी तरह से काम करता है। सामान्यीकरण सुझाव अच्छा है, लेकिन हमेशा संभव नहीं है, जब आप किसी एल्स डेटाबेस के साथ एकीकृत कर रहे हैं। दुर्भाग्य से। – eidylon

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