function - SQL SUM within Query and Group By Duplicates -
यहाँ परिदृश्य है:
सारणी: कॉल मैने: कॉल_आईडी = पीके (आईएनटी) परित्यक्त (INT) या तो 1 या शून्य कॉलहोल्ड: होल्ड_आईडी = पीके (आईएनटी) <अवधि आईडी = "IL_AD2" वर्ग = "IL_AD"> , 0 या कई रिकॉर्ड रिकॉर्ड। हर बार जब कॉल पर हो जाता है तो एक रिकार्ड बनाया जाता है जिसे एफके द्वारा धारण के स्टार्टटाइम और पकड़ का एंडटैम के साथ संदर्भित किया जाता है। अब, कॉल करने के लिए एक क्वेरी में और इनकी कुल जानकारी वापस करने के लिए बार पकड़, मेरा मानना है कि एसक्यूएल इस प्रकार हैं: इस क्वेरी से उन कॉलों के लिए रिकॉर्ड्स वापस करनी चाहिए जिनके पास कोई धार रिकॉर्ड नहीं है और उन्हें नल के रूप में वापस करना चाहिए। एकल पकड़ रिकॉर्ड वाले कॉल सही तरीके से दिखाई देते हैं। शून्य से बाहर आने वाले नलों को ISNULL () फ़ंक्शन के साथ प्रबंधित किया जा रहा है और शून्य के साथ प्रतिस्थापित किया जा रहा है, क्योंकि कॉल के पास कोई पकड़ नहीं है। मेरी समस्या यह है कि एक कॉल कई पकड़ रिकॉर्ड हैं जो परिणाम में दो बार दिखाई देंगे: कॉल_आईडी, होल्डपेरियोड 212, 254 213, 154 214, 158 214, 25 214, 10 जैसा कि ऊपर देखा जा सकता है, कॉल 214 में एकाधिक पकड़ रिकॉर्ड 1 9 33 हैं। मैंने सोचा कि क्वेरी होना चाहिए: मैंने पहले ही कोशिश की: द्वारा आदेश आप पहले से ही अपने आप कह चुके हैं जब आप आपको यह तय करना होगा कि आप किस मूल्यों को प्रदर्शित करना चाहते हैं उदाहरण के लिए, अगर आप इस तरह अधिकतम मान लेने के लिए चुन सकते हैं: या, शायद अधिक तार्किक,
CallMain.Call_ID, CallMain.Abandoned, IsNull का चयन करें ((CallHold.EndTime - CallHold.StartTime), 0) के रूप में CTIStatCall बाएं से HoldPeriodSeconds कॉल करने के लिए कॉलमॉल पर कॉल करें। कॉल_ऑफ = कॉलहोल्ड.कॉल_आईडी
का चयन करें CallMain.Call_ID, CallMain.Abandoned, जोड़ (IsNull ((CallHold.EndTime - CallHold.StartTime), 0)) के रूप में CallMain वाम बाहरी से HoldPeriodSeconds शामिल हों CallHold पर CallMain.Call_ID = CallHold.Call_ID ग्रुप द्वारा CallMain.Call_ID, CallMain मेरा प्रश्न अब मेरे पास मुख्य कॉलम में और कॉलम हैं, जो भी लौटाए जा रहे हैं, कॉलस्टार्ट, कॉलअन्स, कॉल एंड और ये कुछ अन्य व्युत्पन्न मानों की गणना के लिए उपयोग किए जाते हैं। मैं इनको लौटा रहा हूं और उन्हें खंड में समूह में जोड़ रहा हूं, लेकिन फिर से दोहरे मूल्यों को प्रदर्शित करने के लिए वापस चला जाता है। मैं इसे कैसे ठीक करूं?
का चयन करें CallMain.Call_ID, dateadd (s, CallMain.StartTime, '1970-01-01') के रूप में प्रारंभ समय, dateadd ( रों, CallMain.AnsTime, '1970-01-01') AnsTime, DATEADD (रों, CallMain.EndTime, '1970-01-01') के रूप में eNDTIME, CallMain.Abandoned, (CallMain.AnsTime के रूप में - CallMain.StartTime) के रूप में RingPeriod, SUM (IsNull ((CallHold.EndTime - CallHold.StartTime), 0)) HoldPeriod के रूप में, (CallMain.EndTime - CallMain.AnsTime) - IsNull ((CallHold.EndTime - CallHold.StartTime), 0) TalkPeriod के रूप में CallMain से वाम बाहरी पर CallMain.Call_ID = CallHold.Call_ID ग्रुप द्वारा CallMain.Call_ID, CallMain.Abandoned, CallMain.StartTime, CallMain.EndTime, CallMain.AnsTime, CallHold.EndTime, CallHold.StartTime
कॉलस्टार्ट ,
CallAns ,
कॉलएंड द्वारा समूह करते हैं, तो आपको कई परिणाम वापस मिलेंगे। इसका मतलब है कि आपके पास प्रत्येक
Call_ID, बेबंद संयोजन के लिए इन कॉलमों के एक और अनन्य मूल्य है।
का चयन करें CallMain.Call_ID, CallMain.Abandoned, जोड़ (IsNull ((CallHold.EndTime - CallHold.StartTime), 0)) के रूप में HoldPeriodSeconds, (मैक्स (कॉलमैन.एन्स्टाइम) - मैक्स (कॉलमैन.टार्टटाइम)) रिंगपेरियोड के रूप में .... कॉलमैन से बाहर की ओर से कॉलहोल्ड कॉलमैन पर कॉल करें। कॉल_आईडी = कॉलहोल्ड.कॉल_आईडी ग्रुप द्वारा कॉलमैन.कॉल_आईडी, कॉलमैन। कोड>
SUM फ़ंक्शन का उपयोग करें जैसे आपने HoldPeriod के लिए किया था मुझे नहीं पता कि परिणाम के रूप में आपकी उम्मीद क्या है।
Comments
Post a Comment