2010-09-09 10 views
5

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

SID TID Tdatetime  QID QTotal 
---------------------------------------- 
100 1 01/12/97 9:00AM 66 110 
100 1 01/12/97 9:00AM 66 110 
100 1 01/12/97 10:00AM 67 110 
100 2 01/19/97 9:00AM 66 . 
100 2 01/19/97 9:00AM 66 110 
100 2 01/19/97 10:00AM 66 110 
100 3 01/26/97 9:00AM 68 120 
100 3 01/26/97 9:00AM 68 120 
110 1 02/03/97 10:00AM 68 110 
110 3 02/12/97 9:00AM 64 115 
110 3 02/12/97 9:00AM 64 115 
120 1 04/05/97 9:00AM 66 105 
120 1 04/05/97 10:00AM 66 105 

मैं चाहूँगा सभी पंक्तियों के लिए QTotal स्तंभ योग करने के लिए एक प्रश्न लिखने में सक्षम हो और पता लगाने के लिए Tdatetime कॉलम के लिए डुप्लिकेट पंक्तियों की गिनती।

उत्पादन लगेगा जैसे:

Year Total Count
97 | 1340 | 4
परिणाम में तीसरे स्तंभ तालिका में अलग पंक्तियों की गिनती शामिल नहीं है। और आउटपुट को टीडीएटीटाइम कॉलम में सालाना समूहीकृत किया जाता है।

+1

किस डेटाबेस के लिए? –

+0

मुझे यकीन नहीं है कि आपको कौन सी डेटाबेस जानकारी की आवश्यकता होगी। – ARK

+0

वह पूछ रहा है कि डीबीएमएस क्या है। एसक्यूएल सर्वर, ओरेकल, माईएसक्ल, इत्यादि –

उत्तर

0

निम्न क्वेरी मदद मिल सकती है:

SELECT 
    'YEAR ' + CAST(sub.theYear AS VARCHAR(4)), 
    COUNT(sub.C), 
    (SELECT SUM(QTotal) FROM MyTable WHERE YEAR(Tdatetime) = sub.theYear) AS total 
FROM 
    (SELECT 
     YEAR(Tdatetime) AS theYear, 
     COUNT(Tdatetime) AS C 
    FROM MyTable 
    GROUP BY Tdatetime, YEAR(Tdatetime) 
    HAVING COUNT(Tdatetime) >= 2) AS sub 
+0

यह क्वेरी उपरोक्त स्थिति के लिए काम नहीं कर रही है। – ARK

+0

मैंने कोड अपडेट किया है। – Zafer

+0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन किसी और के लिए जो इसे पाता है: 'हैविंग COUNT (Tdatetime)> 2' शायद '> 1' या'> = 2' होना चाहिए अन्यथा यह कुछ भी नहीं मिलेगा जहां वहां है 2 – laurencemadill

0

आपको इस तालिका से COUNT का उपयोग करके QTotal द्वारा ग्रुप करना होगा, इस तालिका से उपखंड जहां QTotal समान है)। अगर मेरे पास केवल समय था तो मैं आपको SQL कथन लिखूंगा, लेकिन इसमें कुछ मिनट लगेंगे।

0

कुछ की तरह:

select Year(Tdatetime) ,sum(QTotal), count(1) from table group by year(Tdatetime) 

या पूर्ण तारीख

select Tdatetime ,sum(QTotal), count(1) from table group by year(Tdatetime) 

या अपने बदसूरत वाक्य रचना (:))

select 'Year ' + cast(Year(tdatetime) as varchar(4)) 
    + '|' + cast(sum(QTotal) as varchar(31)) 
    + '|' + cast(count(1) as varchar(31)) 
from table group by year(Tdatetime) 

या फिर आप साल करना चाहते हैं? सभी कॉलम योग करें? या सिर्फ साल के द्वारा?

SELECT DISTINCT tDateTime, SUM(QTotal), Count(distinct tDateTime) 
FROM Table 
GROUP BY tDateTime 
HAVING Count(distinct tDateTime) > 1 

लेकिन अपने परिणामों tDateTime कॉलम में वर्ष द्वारा समूह को देखने के लिए की तरह आप चाहते हैं:

+0

टीडीएटीटाइम कॉलम में वर्ष के अनुसार समूहित क्यूटी कॉलम का योग। डुप्लिकेट TDateTime कॉलम की गणना। – ARK

1

यह यदि आप वास्तव में tDateTime स्तंभ द्वारा समूहीकृत करना चाहते हैं काम करेंगे। क्या ये सही है?

यदि ऐसा है तो यह प्रयास करें:

SELECT DISTINCT YEAR (tDateTime), SUM(QTotal), Count(distinct tDateTime) 
FROM Table 
GROUP BY YEAR (tDateTime) 
HAVING Count(distinct tDateTime) > 1 
+0

हां, मैं चाहता हूं कि यह वर्ष TDateTime कॉलम में समूहित हो। – ARK

+0

मेरे अपडेट –

+0

पर नज़र डालें, इसमें ऐसी पंक्तियां शामिल नहीं हैं जिनमें डुप्लिकेट पंक्तियां न हों? क्वेरी का परिणाम केवल अलग पंक्तियों को छोड़कर डुप्लिकेट गिनती प्रदर्शित करना चाहिए। – ARK

0
SELECT 
YEar + year(Tdatetime), 
SUM (QTotal), 
(SELECT COUNT(*) FROM ( 
SELECT Tdatetime FROM tDateTime GROUP BY Tdatetime   
HAVING COUNT(QID) > 1) C 
FROM 
Tdatetime t 

GROUP BY 
YEar + year(Tdatetime) 
+0

मुझे लगता है कि आपने जैसा सवाल बताया है, लेकिन मुझे लगता है कि वास्तविक प्रश्न गलत है। जैसा कि दिखाया गया है, लौटाया गया डेटा denormalized है। यह प्रत्येक पंक्ति के लिए एक ही COUNT दिखा रहा है, एक मूल्य जो समूह के वर्ष की बजाय पूरी आबादी का संकेत है। मुझे लगता है कि आंतरिक subquery को "वर्ष (Tdatetime)" पर फ़िल्टरिंग, एक सहसंबंधित सबक्वायरी में बदला जाना चाहिए। –

0

यह पहली बार मैं stackoverflow पर एक प्रश्न पूछा है। ऐसा लगता है कि मैंने अपनी मूल आईडी जानकारी खो दी है। मुझे लॉगिन करने के लिए पंजीकरण करना था और मैंने पोस्ट किए गए प्रश्न पर टिप्पणियां जोड़नी थीं।

ओएमजी टट्टू प्रश्न का उत्तर देने के लिए, यह एक SQL सर्वर 2008 डेटाबेस है। @ एबे मिस्सेलर, एसआईडी 120 के साथ पंक्ति में डुप्लिकेट नहीं है। एसआईडी 120 के लिए पहली पंक्ति डेटाटाइम कॉलम में 9:00 बजे दिखाती है, और दूसरी पंक्ति 10:00 बजे दिखाती है।

@Zafer, आपकी क्वेरी स्वीकार्य उत्तर है। मैंने इसे काम करने के लिए कुछ मामूली बदलाव किए। धन्यवाद। धन्यवाद आपकी सहायता के लिए एबे मिस्सेलर और दूसरों के कारण।

+0

आपको स्वीकार किए गए उत्तर को स्वीकृत के रूप में चिह्नित करने की आवश्यकता है। – RickF

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