2016-04-19 34 views
5

Hi katılıp yapısı Tablo activationinfo iki tablosayım "activationinfo Subscriptioninfo," sql sorgu biz iki tablo var bütün

Subscriptioninfo tablo

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

için böyledir :

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

aşağıdaki sorgu olarak sayar verecektir "biri" eğer aynı yıl ve müşteri e-posta kimliği ile bir giriş Subscriptioninfo (bu gayet)

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

ikimizde tablolarına veri ekler bir sp dört girdileri gibi ben olarak sayar dönmek gerekir

activationinfo nereye (yani) bir giriş Subscriptioninfo "0" bir giriş subscriptioninfo ve iki giriş

activationinfo ve ben olarak sayar dönmek gerekirse "1" aboneliğe bir giriş varsa girişler activationinfo için oninfo ve dört ..

herhangi biri .. ben sayımı ile maddesini katılmasını nasıl alabilirim bu sorguyu önceden

çok teşekkür ederiz ...

bu sorgu ile çalıştı yardım eder misiniz ama

arasında yerine (yani)
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 

cevap

3

kullanınactivationinfo giriş sayımı veriyorifadeleri

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

teşekkür Vignesh .. i sayımı ise 0 izin vermeniz gerekir, daha iyidir <4 ... –

+0

eğer sayımı (*) 4'ten az sayım sonuçları olarak 0'a dönmem gerekiyor ... sadece sayım (*) = 4 ise sadece 1 –

+1

'a dönmem gerekiyor Çok teşekkürler şimdi çalışıyor .... –

1

ben sadece farklı olmaya çalıştı ve mayıs performans

;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

Çözümünüz için teşekkürler .. 1 veya 0 sağa koşulu bağlıdır. –