function - SQL SUM within Query and Group By Duplicates -


यहाँ परिदृश्य है:

सारणी: कॉल मैने:

कॉल_आईडी = पीके (आईएनटी) परित्यक्त (INT) या तो 1 या शून्य

कॉलहोल्ड:

होल्ड_आईडी = पीके (आईएनटी)

<अवधि आईडी = "IL_AD2" वर्ग = "IL_AD"> , 0 या कई रिकॉर्ड रिकॉर्ड। हर बार जब कॉल पर हो जाता है तो एक रिकार्ड बनाया जाता है जिसे एफके द्वारा धारण के स्टार्टटाइम और पकड़ का एंडटैम के साथ संदर्भित किया जाता है।

अब, कॉल करने के लिए एक क्वेरी में और इनकी कुल जानकारी वापस करने के लिए बार पकड़, मेरा मानना ​​है कि एसक्यूएल इस प्रकार हैं:

  CallMain.Call_ID, CallMain.Abandoned, IsNull का चयन करें ((CallHold.EndTime - CallHold.StartTime), 0) के रूप में CTIStatCall बाएं से HoldPeriodSeconds कॉल करने के लिए कॉलमॉल पर कॉल करें। कॉल_ऑफ = कॉलहोल्ड.कॉल_आईडी   

इस क्वेरी से उन कॉलों के लिए रिकॉर्ड्स वापस करनी चाहिए जिनके पास कोई धार रिकॉर्ड नहीं है और उन्हें नल के रूप में वापस करना चाहिए। एकल पकड़ रिकॉर्ड वाले कॉल सही तरीके से दिखाई देते हैं। शून्य से बाहर आने वाले नलों को 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)) के रूप में 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

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

github - Teamcity & Git - PR merge builds - anyway to get HEAD commit hash? -

ios - Replace text in UITextView run slowly -