2016-04-19 18 views
5

Witam wszystkich Mamy dwie tabele „Subscriptioninfo, activationinfo” i struktura jest tak dla dwóch tabelliczyć z wewnętrzną dołączyć zapytanie SQL

Subscriptioninfo stołowych

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

activationinfo tabeli :

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

poniższe zapytanie da rachubę jako „jeden” jeśli wpis do Subscriptioninfo z tym samym identyfikatorem lat i klient poczty (to jest w porządku)

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

mamy jeden sp że będzie wstawić dane do obu tabel (tj) jedno wejście do Subscriptioninfo gdzie jako cztery wpisy do activationinfo

muszę wrócić rachubę jako „0”, jeśli jeden wpis do subscriptioninfo i dwa wpisy do activationinfo

i muszę wrócić liczone jako „1” jeśli jeden wpis do subscripti oninfo i cztery wpisy do activationinfo ..

Czy ktoś proszę o pomoc w tej kwerendzie Jak mogę uzyskać, że hrabia z dołączyć klauzulę ..

Many thanks in advance ...

próbowali z tego zapytania ale to daje liczbę wejścia activationinfo (tj) zamiast

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 

Odpowiedz

3

Korzystając CASE oświadczenia

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

dzięki Vignesh .. muszę pozwolić 0 jeśli liczba jest <4 ... –

+0

jeśli count (*) jest mniej niż 4 Muszę zwrócić 0 jako wynik liczenia ... tylko wtedy, gdy liczba (*) = 4 tylko muszę zwrócić 1 –

+1

Wielkie dzięki jej działa teraz .... –

1

Ja tylko starałem się być różne i mogą wydajność jest lepsza,

;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

Dzięki za rozwiązanie .. to da albo Prawo 1 lub 0 zależy od warunku .. –