2016-04-19 294 views
5

大家好我们有两个表“的SubscriptionInfo,activationinfo” 和结构是这样的两个表计数与内部联接SQL查询

的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与同年和客户的电子邮件ID(这是罚款)

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

我们有一个SP将数据插入到两个表(IE)一个进入的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

如果count(*)是小于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的权利取决于条件.. –