2011-10-24 18 views
11

मेरे पास दो टेबल हैं। इसमें अंतर है कि एक संग्रह एक सारणी है और दूसरा वर्तमान रिकॉर्ड रखता है। ये कंपनी में बिक्री रिकॉर्डिंग टेबल हैं। दोनों में हम अन्य क्षेत्रों में हैं: आईडी, नाम, बिक्री की कीमत। मुझे किसी दिए गए नाम के लिए दोनों टेबल, उच्चतम और निम्नतम मूल्य से चयन करने की आवश्यकता है। मैं क्वेरी के साथ करने की कोशिश की:दो टेबलों से अधिकतम, न्यूनतम मान का चयन करें

select name, max (price_of_sale), min (price_of_sale) 
from wapzby 
union 
select name, max (price_of_sale), min (price_of_sale) 
from wpzby 
order by name 

लेकिन इस तरह के एक जांच मुझे दो रिकॉर्ड ड्रॉ - वर्तमान तालिका में से एक, एक मेज अभिलेखीय। मैं दोनों टेबलों से तुरंत सबसे छोटी और सबसे बड़ी कीमत के लिए एक नाम चुनना चाहता हूं। मैं यह प्रश्न कैसे प्राप्त करूं?

+2

यह क्या एसक्यूएल इंजन है? मेरी आंखों में आप एक ग्रुप बाय (प्रत्येक विशिष्ट 'नाम के चारों ओर MIN और MAX को एकत्र करने के लिए) और एक WHERE क्लॉज (केवल एक' नाम 'तक सीमित करने के लिए) गायब हैं। – pilcrow

उत्तर

1

क्या यह वही है जो आप चाहते हैं?

SELECT 
    a.name, 
    MAX (a.price_of_sale), 
    MIN (a.price_of_sale) , 
    b.name, 
    MAX (b.price_of_sale), 
    MIN (b.price_of_sale) 
FROM 
    wapzby a, 
    wpzby b 
ORDER BY 
    a.name 

यह untested है, लेकिन एक संघ

+0

यदि बी में बीयर है, और बी में पनीर है ... वह बीयर और पनीर के परिणामस्वरूप एक पंक्ति प्राप्त करेगा। मुझे नहीं लगता कि कार्टेशियन जुड़ना वह चाहता है जो वह चाहता है। –

6

की आवश्यकता के बिना एक पंक्ति पर अपने सभी रिकॉर्ड लौटना चाहिए एसक्यूएल सर्वर में आप एक subquery इस्तेमाल कर सकते हैं:

SELECT [name], 
     MAX([price_of_sale]) AS [MAX price_of_sale], 
     MIN([price_of_sale]) AS [MIN price_of_sale] 
FROM (
    SELECT [name], 
      [price_of_sale] 
    FROM [dbo].[wapzby] 
    UNION 
    SELECT [name], 
      [price_of_sale] 
    FROM [dbo].[wpzby] 
) u 
GROUP BY [name] 
ORDER BY [name] 
22

यहाँ दो विकल्प है (MSSQL शिकायत)

नोट: यूनियन सभी डुप्लिकेट को खत्म किए बिना सेट को जोड़ देगा। यूनियन की तुलना में यह एक बहुत ही सरल व्यवहार है।

SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice 
FROM 
(
    SELECT Name, Price_Of_Sale 
    FROM wapzby 
    UNION ALL 
    SELECT Name, Price_Of_Sale 
    FROM wpzby 
) as subQuery 
GROUP BY Name 
ORDER BY Name 

यह सेट सेट करने से पहले प्रत्येक तालिका से अधिकतम और न्यूनतम आंकड़े बताता है - यह इस तरह से करने के लिए और अधिक सक्षम हो सकता है।

SELECT Name, MAX(MaxPrice) as MaxPrice, MIN(MinPrice) as MinPrice 
FROM 
(
    SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice 
    FROM wapzby 
    GROUP BY Name 
    UNION ALL 
    SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice 
    FROM wpzby 
    GROUP BY Name 
) as subQuery 
GROUP BY Name 
ORDER BY Name 
+0

धन्यवाद - यह वही है जो मैं चाहता हूं – BKl

1
SELECT MAX(value) FROM tabl1 UNION SELECT MAX(value) FROM tabl2; 
SELECT MIN(value) FROM tabl1 UNION SELECT MIN(value) FROM tabl2; 
+0

शायद यह मदद करेगा यदि आप वर्णन करते हैं कि एसक्यूएल क्या करता है और इसे पठनीयता के लिए प्रारूपित करता है। –

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