2016-04-19 23 views
5

Hi tất cả chúng tôi đã có hai bảng "Subscriptioninfo, activationinfo" và cấu trúc là như thế này cho hai bảngđếm với bên tham gia truy vấn sql

Subscriptioninfo bảng

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

activationinfo Bảng :

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

truy vấn dưới đây sẽ cung cấp cho các tính là "một" nếu một mục để Subscriptioninfo với cùng một ID năm và khách hàng email (điều này là tốt)

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

chúng tôi có một sp mà sẽ chèn dữ liệu vào cả hai bảng (ví dụ) một entry để subscriptioninfo nơi như bốn mục để activationinfo

tôi cần phải trả lại tính là "0" nếu một entry để subscriptioninfo và hai mục để activationinfo

và tôi cần phải trả lại tính là "1" nếu một mục nhập vào subscripti oninfo và bốn mục để activationinfo ..

có bất kỳ một xin vui lòng giúp đỡ về truy vấn này làm thế nào tôi có thể nhận được rằng đếm với tham gia khoản ..

Nhiều cảm ơn trước ...

thử với truy vấn này nhưng nó được đưa ra số lượng nhập activationinfo (ví dụ) thay vì

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 

Trả lời

3

Sử dụng CASE báo cáo

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

nhờ Vignesh .. tôi cần phải cho phép 0 nếu đếm là <4 ... –

+0

nếu count (*) nhỏ hơn 4 tôi cần trả về 0 khi đếm kết quả ... chỉ khi đếm (*) = 4 chỉ tôi cần trả lại 1 –

+1

Rất cám ơn vì đã làm việc ngay bây giờ .... –

1

tôi chỉ cố gắng thể khác nhau và có thể hoạt động tốt hơn,

;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

Cảm ơn giải pháp của bạn .. điều này sẽ cung cấp 1 hoặc 0 phải phụ thuộc vào điều kiện .. –

Các vấn đề liên quan