मेरे पास टेबल है - 5 रिकॉर्ड और आईडी वाले छात्र 1 से 5 हैं, अब मैं रिकॉर्ड्स का चयन करना चाहता हूं - इस तरह से परिणाम आईडी कॉलम के दिए गए सॉर्टिंग ऑर्डर की तरह आना चाहिए

आईडी कॉलम का परिणाम होना चाहिए - 5,2,1,3,4 (आदेश हर बार भिन्न हो सकता है)

ऑरैकल एसक्यूएल में ऐसा करने का कोई और तरीका है?

MySQL में हमारे पास ऐसा करने के लिए FIELD() क्लॉज है। मैं इसे ओरेकल में हासिल करना चाहता हूं।

1
Vijaya Raghavan 13 फरवरी 2020, 13:08
यदि आप आईडी के आधार पर छाँटते हैं तो यह क्रम में छा जाएगा। आप किस क्षेत्र में क्रमबद्ध करना चाहते हैं?
 – 
sandman
13 फरवरी 2020, 13:28
क्या इससे आपके सवाल का जवाब मिलता है? Oracle SQL में कस्टम ऑर्डर
 – 
Ponder Stibbons
13 फरवरी 2020, 13:46

2 जवाब

एक त्वरित और गंदा तरीका instr() का उपयोग करता है:

order by instr(',5,2,1,3,4,', ',' || id ',')

स्ट्रिंग में नहीं मानों को संभालने के लिए, आप उन्हें NULL में बदल सकते हैं और उन्हें तदनुसार क्रमबद्ध कर सकते हैं:

order by nullif(instr(',5,2,1,3,4,', ',' || id ','), 0) nulls last
0
Gordon Linoff 13 फरवरी 2020, 14:45

Oracle हीप-ऑर्गनाइज्ड टेबल का उपयोग करता है, जिसका अर्थ है कि डिफ़ॉल्ट पंक्तियों को किसी विशेष क्रम में संग्रहीत नहीं किया जाता है। हालांकि, पंक्तियों का चयन करते समय, आप एएससी (डिफ़ॉल्ट)/डीईएससी क्रम में सेट किए गए परिणाम को वापस करने के लिए स्पष्ट रूप से आदेश द्वारा खंड का उल्लेख कर सकते हैं।

आप छँटाई को अनुकूलित करने के लिए DECODE/CASE का उपयोग कर सकते हैं, उदाहरण के लिए:

with data as(
select level num from dual connect by level <=5 
)
select num
from data 
order by case 
 when num = 5 then 1
 when num = 2 then 2
 when num = 1 then 3 
 when num = 3 then 4 
 when num = 4 then 5
end;

       NUM
----------
         5
         2
         1
         3
         4
0
Lalit Kumar B 13 फरवरी 2020, 15:24