2016-04-19 10 views
5

हाय सब हम दो तालिकाओं मिल गया है "Subscriptioninfo, activationinfo" और संरचना दो तालिकाओंगिनती एसक्यूएल क्वेरी में शामिल होने

Subscriptioninfo तालिका

cert_id (int, PK) 
    customer_email(string) 
    subscription_key(string) 
    activated_on (datetime) 

टेबल activationinfo के लिए इस तरह है :

cert_id (int) 
    activationcode(string) 
    subscription_key(string , FK) 
    activated_ts(datetime) 

नीचे दी गई क्वेरी के रूप में गिनती दे देंगे "एक" अगर के लिए कोई प्रविष्टि Subscriptioninfo एक ही वर्ष और ग्राहक ईमेल आईडी (यह ठीक है)

SELECT COUNT(*) FROM Subscriptioninfo WITH (NOLOCK) 
WHERE year(activated_On) = year(getdate()) AND customer_email [email protected] 

हम एक एसपी कि दोनों तालिकाओं में डेटा सम्मिलित होगा (यानी) एक प्रविष्टि Subscriptioninfo को जहां चार प्रविष्टियों के रूप में

मैं के रूप में गिनती वापस जाने के लिए की जरूरत है activationinfo को "0" एक प्रविष्टि subscriptioninfo करने के लिए यदि और दो प्रविष्टियों

activationinfo करने के लिए और मैं के रूप में गिनती वापस जाने के लिए की जरूरत है "1" अगर subscripti में एक प्रविष्टि oninfo और चार प्रविष्टियों activationinfo को ..

किसी भी एक कृपया इस क्वेरी मैं कैसे है कि गिनती के साथ खंड में शामिल होने के प्राप्त कर सकते हैं पर .. मदद करेंगे अग्रिम में

बहुत धन्यवाद ...

इस क्वेरी के साथ करने की कोशिश की लेकिन यह

की (यानी) activationinfo प्रविष्टि गिनती दे रहा है बजाय
SELECT COUNT(*) FROM subscriptioninfo csi join activationinfo aci on csi.subscription_key = aci.subscription_key 
WHERE year(Activated_On) = year(getdate()) AND customer_email = '[email protected]' group by csi.subscription_key 

उत्तर

3

उपयोग CASE बयान

SELECT CASE WHEN COUNT(*) = 4 THEN 1 
      WHEN COUNT(*) < 4 THEN 0 
     END CountResults 
FROM subscriptioninfo csi 
join activationinfo aci on csi.subscription_key = aci.subscription_key 
WHERE year(Activated_On) = year(getdate()) AND customer_email = '[email protected]' group by csi.subscription_key 
+0

धन्यवाद विग्नेश .. मैं अगर गिनती है 0 की अनुमति देनी है, <4 ... –

+0

अगर गिनती (*) 4 से कम है मुझे 0 को गिनती के परिणाम के रूप में वापस करने की आवश्यकता है ... केवल अगर गिनती (*) = 4 केवल मुझे 1 –

+1

लौटने की ज़रूरत है तो बहुत धन्यवाद यह अब काम कर रहा है .... –

1

मैं सिर्फ अलग होने की कोशिश की और हो सकता है प्रदर्शन बेहतर

;WITH CTE 
AS (
    SELECT * 
     ,row_number() OVER (
      ORDER BY cert_id 
      ) rn 
    FROM @activationinfo A 
    ) 
SELECT * 
    ,1 AS CountResult 
FROM @Subscriptioninfo S 
WHERE EXISTS (
     SELECT cert_id 
     FROM CTE A 
     WHERE s.cert_id = a.cert_id 
      AND rn = 4 
     ) 

UNION ALL 

SELECT * 
    ,0 AS CountResult 
FROM @Subscriptioninfo S 
WHERE EXISTS (
     SELECT cert_id 
     FROM CTE A 
     WHERE s.cert_id = a.cert_id 
      AND rn < 4 
     ) 
+0

आपके समाधान के लिए धन्यवाद .. यह या तो देगा 1 या 0 सही स्थिति पर निर्भर करता है .. –

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