2016-04-19 20 views
5

Ciao a tutti abbiamo ottenuto due tavoli "Subscriptioninfo, activationinfo" e la struttura è così per i due tavoli tavolocon inner join query SQL

Subscriptioninfo

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

activationinfo Tabella :

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

la query di seguito darà il conteggio come "uno" se una voce per Subscriptioninfo con lo stesso ID anno e cliente e-mail (questo va bene)

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

abbiamo una sp che inserire i dati in entrambe le tabelle (ie) un ingresso per Subscriptioninfo dove, come quattro voci per activationinfo

ho bisogno di tornare contano come "0" se una voce di subscriptioninfo e due voci per activationinfo

e ho bisogno di tornare contano come "1" se una voce per subscripti oninfo e quattro voci activationinfo ..

Sarebbe uno si prega di aiutare su questa query come posso ottenere che contano con unirsi clausola ..

Molte grazie in anticipo ...

provato con questa query ma sta dando il numero di registrazioni activationinfo (ie) invece di

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 

risposta

3

Usa CASE dichiarazioni

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

grazie Vignesh .. ho bisogno di consentire 0 se count è <4 ... –

+0

se count (*) è inferiore a 4 ho bisogno di restituire 0 come risultato del conteggio ... solo se count (*) = 4 solo ho bisogno di restituire 1 –

+1

Grazie mille per il suo lavoro ora .... –

1

ho solo cercato di essere diversi e possono prestazione è migliore,

;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

Grazie per la vostra soluzione .. questo darà sia 1 o 0 a destra dipende dalla condizione .. –