2009-06-08 21 views
6

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

SELECT avg(KW) as GEN_101_AVG 
FROM   genset WHERE  (GenSetName like 'GEA3519') and GenDate >= '1 jan 2003 00:00:00' and GenDate < '1 feb 2003 00:00:00' 

    SELECT avg(KW) as GEN_201_AVG 
FROM   genset WHERE  (GenSetName like 'GEA3520') and GenDate >= '1 jan 2003 00:00:00' and GenDate < '1 feb 2003 00:00:00' 

SELECT avg(KW) as GEN_301_AVG 
FROM   genset WHERE  (GenSetName like 'GEA3521') and GenDate >= '1 jan 2003 00:00:00' and GenDate < '1 feb 2003 00:00:00' 

SELECT avg(KW) as GEN_401_AVG 
FROM   genset WHERE  (GenSetName like 'GEA3522') and GenDate >= '1 jan 2003 00:00:00' and GenDate < '1 feb 2003 00:00:00' 

MS-एसक्यूएल

+1

बल्कि 'mssql' की तुलना में 'sqlserver' टैग का उपयोग करें निम्नलिखित की तरह। अपने प्रश्नों को टैग करते समय सुझाव देखें: नाम के बाद 10 से कम संख्या वाला कोई भी टैग शायद गलत है। इस मामले में, 'sqlserver' टैग किए गए 5000 से अधिक प्रश्न हैं और ज़ीरो टैग की गईं 'msssql'। –

+0

यकीन नहीं है कि मुझे नीचे वोट क्यों मिला – Brad

+0

रिकॉर्ड के लिए: मैं नहीं था। –

उत्तर

20
SELECT (
     SELECT avg(KW) 
     FROM genset 
     WHERE (GenSetName like 'GEA3519') 
       and GenDate >= '1 jan 2003 00:00:00' 
       and GenDate < '1 feb 2003 00:00:00' 
     ) AS avg_GEA3519, 
     (
     SELECT avg(KW) 
     FROM genset 
     WHERE (GenSetName like 'GEA3520') 
       and GenDate >= '1 jan 2003 00:00:00' 
       and GenDate < '1 feb 2003 00:00:00' 
     ) AS avg_GEA3520, 
     (
     SELECT avg(KW) 
     FROM genset 
     WHERE (GenSetName like 'GEA3521') 
       and GenDate >= '1 jan 2003 00:00:00' 
       and GenDate < '1 feb 2003 00:00:00' 
     ) AS avg_GEA3521, 
     (
     SELECT avg(KW) 
     FROM genset 
     WHERE (GenSetName like 'GEA3522') 
       and GenDate >= '1 jan 2003 00:00:00' 
       and GenDate < '1 feb 2003 00:00:00' 
     ) AS avg_GEA3522 

, या SQL Server 2005+ में, इस:

SELECT [GEA3519], [GEA3520], [GEA3521], [GEA3522] 
FROM (
     SELECT GenSetName, KW 
     FROM genset 
     WHERE GenDate >= '1 Jan 2003 00:00:00' 
       AND GenDate < '1 Feb 2003 00:00:00' 
     ) AS q 
PIVOT 
(
     AVG(KW) 
     FOR GenSetName IN (['GEA3519'], ['GEA3520'], ['GEA3521'], ['GEA3522'] 
) 
+1

मेरे विचार पूरी तरह से- हालांकि मैं व्यक्तिगत रूप से उन स्तंभों को भी उपनाम दूंगा। – RichardOD

+0

अच्छा, यह भी अच्छा है :-) मैं अपने परिवर्तनीय दृष्टिकोण को पोस्ट करने में थोड़ा देर हो चुकी थी। –

1

चयन की संख्या के रूप में चार तक ही सीमित है, एक समाधान में चयन करने के लिए किया जाएगा चर और फिर अंतिम चयन करें।

declare @var1 <TYPE> 
declare @var2 <TYPE> 
declare @var3 <TYPE> 
declare @var4 <TYPE> 

select @var1 = SELECT avg(...) ... 
select @var2 = ... 
select @var3 = ... 
select @var4 = ... 

select @var1 as ..., @var2 as ..., @var3 as ..., @var4 as ... 
+0

आप उपरोक्त सबक्वायरी समाधान के साथ बेहतर तरीके से जा सकते हैं। यदि आप चयन करने से पहले चार मानों में हेरफेर करने की आवश्यकता है तो आप मेरे दृष्टिकोण का उपयोग कर सकते हैं। –

2

एक अन्य विकल्प:

SELECT 
    AVG(GEN_101.kw) AS GEN_101_AVG, 
    AVG(GEN_201.kw) AS GEN_201_AVG, 
    AVG(GEN_301.kw) AS GEN_301_AVG, 
    AVG(GEN_401.kw) AS GEN_401_AVG 
FROM 
    Genset GEN_101 
INNER JOIN Genset GEN_201 ON 
    GEN_201.GenSetName = 'GEA3520' AND 
    GEN_201.GenDate >= '1 jan 2003 00:00:00' AND 
    GEN_201.GenDate < '1 feb 2003 00:00:00' 
INNER JOIN Genset GEN_101 ON 
    GEN_301.GenSetName = 'GEA3521' AND 
    GEN_301.GenDate >= '1 jan 2003 00:00:00' AND 
    GEN_301.GenDate < '1 feb 2003 00:00:00' 
INNER JOIN Genset GEN_101 ON 
    GEN_401.GenSetName = 'GEA3522' AND 
    GEN_401.GenDate >= '1 jan 2003 00:00:00' AND 
    GEN_401.GenDate < '1 feb 2003 00:00:00' 
WHERE 
    GEN_101.GenSetName = 'GEA3519' AND 
    GEN_101.GenDate >= '1 jan 2003 00:00:00' AND 
    GEN_101.GenDate < '1 feb 2003 00:00:00' 
+0

यह वास्तव में एवीजी (और केवल एवीजी के लिए) के लिए काम करेगा, क्योंकि एवीजी इस बात पर निर्भर नहीं है कि तालिका को दूसरी तालिका में कितनी बार पार किया जा रहा है। प्रदर्शन निश्चित रूप से खराब होगा, लेकिन एक कामकाजी और इतना स्पष्ट समाधान +1 के लायक नहीं है। – Quassnoi

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