2010-04-02 5 views
5

के साथ SQL सर्वर ऑर्डर/जहां भी एक नेस्टेड चयन से कॉलम द्वारा ऑर्डर करने के लिए SQL सर्वर प्राप्त करने का प्रयास कर रहा हूं। मुझे पता है कि यह करने का यह सबसे अच्छा तरीका नहीं है लेकिन इसे करने की जरूरत है।नेस्टेड चयन

मेरे पास दो टेबल, बुकिंग और बुकिंगिंग हैं। BookingItems में स्टार्टडेट और एंडडेट फ़ील्ड शामिल हैं, और बुकिंग पर एकाधिक बुकिंगिंग हो सकते हैं। मुझे BookingItems से सबसे पुरानी स्टार्टडेट और नवीनतम समाप्ति तिथि खोजने की आवश्यकता है, फिर इन मानों द्वारा फ़िल्टर करें और क्रमबद्ध करें।

मैंने नेस्टेड चयन के साथ प्रयास किया है, लेकिन जब मैं किसी भी कॉलम या ऑर्डर द्वारा चयनित कॉलम का उपयोग करने का प्रयास करता हूं, तो मुझे "अमान्य कॉलम नाम" मिलता है।

SELECT b.*, (SELECT COUNT(*) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS TotalRooms, 
     (SELECT MIN(i.StartDate) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS StartDate, 
     (SELECT MAX(i.EndDate) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS EndDate 
FROM bookings b LEFT JOIN customers c ON b.CustomerID = c.CustomerID WHERE StartDate >= '2010-01-01' 

क्या मुझे एसक्यूएल ऑर्डरिंग के बारे में कुछ याद आ रहा है? मैं एसक्यूएल सर्वर का उपयोग कर रहा 2008

उत्तर

7

यह एक समस्या नहीं होनी चाहिए में बातें बताते हैं। क्या आप असफल क्वेरी पोस्ट कर सकते हैं जो असफल हो रहा है?

इसके अलावा, अपने परिणामों को समूहीकरण आसान हो जाएगा और संभावना तेजी से तो नेस्टेड क्वेरी चलाने:

SELECT 
    TotalRooms = COUNT(*) 
, StartDate = MIN(i.StartDate) 
, EndDate = MAX(i.EndDate) 
FROM bookings b 
LEFT JOIN bookingitems bi 
    ON b.BookingID = bi.BookingID 
GROUP BY b.BookingID 
WHERE MIN(i.StartDate) >= '2010-01-01' 
ORDER BY StartDate, EndDate 
+0

निर्माण पूरी तरह से है, धन्यवाद। – Echilon

4

उत्तर:

जब मैं एक कहां या आदेश द्वारा में चयनित स्तंभों में से एक का उपयोग करने का प्रयास करें, मैं प्राप्त एक "अमान्य स्तंभ नाम"।

आपके और कहां आदेश के लिए अलग अलग तरीकों का उपयोग करने की आवश्यकता होगी। क्या आप सही कोड पोस्ट कर रहे हैं जिसे आप कोशिश कर रहे थे?

नीचे मूल्यांकन का (सामान्य) आदेश है। कॉलम उपनाम 5 कदम से ही उपलब्ध हैं के बाद तो द्वारा आदेश में प्रयोग करने योग्य हैं लेकिन जहां

(5) SELECT (6) DISTINCT 
(1) FROM 
(2) WHERE 
(3) GROUP BY 
(4) HAVING 
(7) ORDER BY 

अपने पोस्ट क्वेरी के मामले में आप इसे इस तरह से कुछ करने के लिए त्रुटि से बचने की आवश्यकता होगी में। मैंने सैमांतिक्स को देखने के लिए शून्य समय बिताया है यह देखने के लिए कि क्या कोई बेहतर तरीका है या नहीं!

SELECT b.*, (SELECT COUNT(*) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS TotalRooms, 
     (SELECT MIN(i.StartDate) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS StartDate, 
     (SELECT MAX(i.EndDate) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS EndDate 
FROM bookings b LEFT JOIN customers c ON b.CustomerID = c.CustomerID 
WHERE (SELECT MIN(i.StartDate) FROM bookingitems i WHERE b.BookingID = i.BookingID) >= '2010-01-01' 

यह धागा और अधिक विस्तार http://dbaspot.com/forums/sqlserver-programming/392124-when-can-we-use-column-alias-where-group-having-order.html#8

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