2011-12-12 13 views
5

हाय लोग मैं है एसक्यूएल में निम्न क्वेरीएसक्यूएल जानकारी प्राप्त करने के लिए, लेकिन गलत क्रम में

SELECT 
a1 
FROM 
dbo.myProductNames 
WHERE 
keycode = 40 OR keycode = 28 OR keycode = 32 OR keycode = 50 

ए 1 = नाम मैं तालिका में जानकारी उत्पादन के लिए नामों के क्रम Ive में पूछे इसकी पूछा की जरूरत है , इसलिए मुझे पहले 40 होने की आवश्यकता है, फिर 28 पर।

इसका कारण यह है कि मेरा कोड एक सरणी में परिणाम और स्टोर पढ़ता है जिसका उपयोग किसी फ़ॉर्म पर प्रदर्शित करने के लिए किया जाता है।

तालिका SQL क्वेरी से आता संख्या क्रम में संग्रहीत जानकारी है, तो 28 पहले पढ़ा जाएगा आदि आदि

जैसा कि मैंने कहा है मैं मैं में दर्ज किए गए आदेश में जानकारी प्राप्त करने की आवश्यकता कहां कारण।

मैं नेस्टेड चयन विवरणों के साथ कुछ करने के लिए सोच रहा हूं हालांकि कभी भी नेस्टेड चयनों का प्रयास नहीं किया।

या, क्या कोई आसान तरीका है?

कोई भी मदद महान होगी!

अग्रिम में बहुत धन्यवाद!

!!!!! अद्यतन !!!!!

ठीक है, यहां आपके लिए समाधान धन्यवाद है!

SqlCommand pgNameFill = new SqlCommand("SELECT a1, CASE keycode WHEN @pg1 THEN 1 WHEN @pg2 THEN 2 WHEN @pg3 THEN 3 WHEN @pg4 THEN 4 END AS SortOrder FROM dbo.myProductNames WHERE keycode IN (@pg1, @pg2, @pg3, @pg4) ORDER BY SortOrder ASC", conny1); 

     pgNameFill.Parameters.AddWithValue("@pg1", pg1); 
     pgNameFill.Parameters.AddWithValue("@pg2", pg2); 
     pgNameFill.Parameters.AddWithValue("@pg3", pg3); 
     pgNameFill.Parameters.AddWithValue("@pg4", pg4); 
     SqlDataReader readpg = pgNameFill.ExecuteReader(); 

सभी पदों के लिए बहुत धन्यवाद! काश मैं सिर्फ एक से अधिक उत्तरों को ध्वजांकित कर सकता हूं, ओह ठीक चारों तरफ ऊपर!

+2

वैसे आप भी कहां में कीकोड इस्तेमाल कर सकते हैं (40,28,32,50) और आप किसी प्रकार की ऑर्डर की तलाश कर रहे हैं? – Ruben

+0

आपके द्वारा बनाई गई कुछ टिप्पणियों के आधार पर, आप बताते हैं कि यह पैरामीटर किया जाएगा। क्या यह होगा कि आपके पास पूर्णांक पूर्णांक पैरामीटर हैं? या क्या आपको ऐसे समाधान की आवश्यकता है जो पैरामीटर के 'किसी भी संख्या' को स्वीकार करता है, और फिर भी आदेश को बनाए रखता है? फिर, क्या यह गतिशील एसक्यूएल होगा (निष्पादित करने के लिए एक एसक्यूएल स्ट्रिंग का निर्माण, उस स्ट्रिंग में संदर्भित पैरामीटर के साथ), या एक संग्रहीत प्रक्रिया? इसके अलावा, एसक्यूएल का कौन सा संस्करण इसके लिए है? – MatBailie

+0

आह हाँ, यह हमेशा 4 पैरा होगा, मैं 2008 सर्वर पर एमएसएसक्यूएल का उपयोग कर रहा हूं।और मैं C# – lemunk

उत्तर

5

निम्न क्रम BY खंड जोड़ें:

ORDER BY 
CASE keycode 
    when 40 then 1 
    when 28 then 2 
    when 32 then 3 
    when 50 then 4 
END 
+0

अपडेट की गई मेरी पोस्ट – lemunk

+0

किंवदंती अपडेट की गई! ठीक काम करता है! – lemunk

4

आपको ORDER BY कीवर्ड का उपयोग करने की आवश्यकता है। जब तक क्वेरी में कोई ऑर्डर निर्दिष्ट नहीं किया जाता है, तब तक कोई गारंटी नहीं है कि डेटाबेस किस रिकॉर्ड को रिकॉर्ड करेगा। तालिका में रिकॉर्ड्स का क्रम आवश्यक रूप से क्वेरी परिणामों में रिकॉर्ड का क्रम नहीं होगा।

यदि आपको जिस क्रम की आवश्यकता है वह सख्ती से संख्यात्मक या वर्णमाला नहीं है, तो आपको अपनी तालिका में एक अतिरिक्त सॉर्टऑर्डर कॉलम जोड़ना आवश्यक हो सकता है जिसे आप वांछित के रूप में क्रमबद्ध करने के लिए उपयोग कर सकते हैं।

+2

लेकिन क्या आदेश है? वह कुंजीकोड द्वारा ऑर्डर करना चाहता है, लेकिन एएससी या डीईएससी नहीं बल्कि प्रत्येक क्वेरी के लिए एक विशिष्ट तरीके से (यदि मैं सही ढंग से समझता हूं)। – Flo

+0

मैं सहमत हूं और आम तौर पर यह मामूली समस्या को हल करने का मेरा पहला प्रयास होगा। लेकिन ऑर्डर वह है जो उपयोगकर्ता चाहता है, इसलिए कोई ऑर्डर नहीं हो सकता है, कि सबसे बड़ी समस्या है कि मेरे पास – lemunk

+0

बिल्कुल सही फ़्लो है, क्योंकि मैंने कहा है कि यह उपयोगकर्ता द्वारा सेट की गई परेशानी की समस्या है, अगर मेरे पास मेरा तरीका था तो मैं बस जानकारी एएससी या डीईएससी को सॉर्ट करें और कोई जांच नहीं होगी! – lemunk

5

एक तरीका (आपके इतिहास से mssql मानते हुए);

;with myRank(rank, keycode) as (
    select 1, 40 union 
    select 2, 28 union 
    select 3, 32 union 
    select 4, 50 
) 
select 
    a1 
from 
    myProductNames 
    inner join myRank on (myProductNames.keycode = myRank.keycode) 
order by 
    myRank.rank asc 
+0

को अपडेट किया जो दिलचस्प लग रहा है, एक और चीज है जो आपने जो किया है उसे देखते हुए, मेरे मूल्य पैरामीटर पास किए जाएंगे, इसलिए यह कुंजीकोड = @ pg1 होगा। क्या इस तरह के पैरामीटर पास करना ठीक है या क्या इसे अलग-अलग किया जाना है? – lemunk

+0

यह वास्तव में वैरिएबल पर निर्भर करता है, आप सीटीई में चर का उपयोग 'चयन 1, @ 1stparam_with_top_rank यूनियन' के रूप में कर सकते हैं ... ' –

+0

व्यक्तिगत रूप से मैं क्वेरी में इस तरह के तर्क को हार्ड-कोडिंग से बचूंगा। क्या होता है जब इसे बदलने की जरूरत होती है? एक रखरखाव सिरदर्द हो सकता है। – Simon

2

साइमन के उत्तर में जोड़ना। मैं की तरह कुछ करने के लिए क्वेरी बदल जाएगा:

SELECT 
a1, 
CASE keycode WHEN 40 THEN 1 
WHEN 28 THEN 2 
WHEN 32 THEN 3 
WHEN 50 THEN 4 END AS SortOrder 
FROM dbo.myProductNames 
WHERE keycode IN (40, 28, 32, 50) 
ORDER BY SortOrder ASC 
+0

उत्कृष्ट उत्तर के साथ निश्चित कीकोड को प्रतिस्थापित कर सकते हैं, लेकिन रिबाउंड के लिए मेरा सवाल पैरामीटर के बारे में क्या है। मेरे कोड में उपयोगकर्ता एक "पीजी" (उत्पाद समूह) का चयन करता है जो 40 हो सकता है। यह तब मेरे सी # कोड में एक एसक्यूएल रीडर में पैरामीटर के रूप में पारित किया जाता है जैसे "कुंजीकोड = @ पीजी 1 या कीकोड = @ पीजी 2 .. ..आदि" । केवल कारण मैं पूछता हूं क्योंकि अगर मुझे याद है कि पैरामीटर का उपयोग करते समय हमेशा कुछ प्रतिबंध होते हैं। – lemunk

+0

या मैं सोच रहा हूँ? – lemunk

+0

मेरी पोस्ट – lemunk

1
SELECT a1 
FROM myProductNames 
ORDER BY CASE WHEN keycode =40 THEN 1 
       WHEN keycode =28 THEN 2 
       WHEN keycode =32 THEN 3 
       WHEN keycode =50 THEN 4 
       ELSE 5 
       END; 
+0

ने मेरी पोस्ट अपडेट की – lemunk

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

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