在一个条件中实现两个过滤器 - SQL

时间:2009-12-01 08:55:32

标签: sql-server

我正在创建一份报告。在那里我显示总数没有线索,通过传真发送的线索和通过短信发送的线索。我写了一个程序来获取记录。在这里,我必须检查一个条件,即通过短信发送的潜在客户和通过传真发送的潜在客户不应为零。如果两者都为零,我不应该获取记录。如果其中一个有任何价值我应该获取记录。是否可以通过SQL Query实现它。

从OP评论到旁观者

SELECT  C.ClientID ,
        C.ClientName ,
        C.OrganizationName,
        C.FirstName ,
        S.SMSOverageRate ,
        '' as Cost ,
        Count(*) as TotalLeads ,
        Sum(CASE DeliveryViaFax WHEN 'Y' THEN 1 ELSE 0 END) AS FaxCount ,
        Sum(CASE DeliveryViaSMSEmail WHEN 'Y' THEN 1 ELSE 0 END) AS SMSCount 
FROM    CMN_LeadSaleDetails S INNER JOIN 
        CMN_LeadClients C ON C.ClientID = S.BuyerID 
WHERE   C.SellerTenantId = @TenantId 
AND     S.SellerJournalID = CASE @JournalId WHEN 0 THEN S.SellerJournalID ELSE @JournalId END 
GROUP BY C.ClientID ,
        C.ClientName ,
        C.OrganizationName,
        C.FirstName ,
        S.SMSOverageRate

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情

SELECT *
FROM TABLE
WHERE (TotalSMSLeads != 0
OR TotalFaxLeads != 0)

提供示例查询,我们可以为您提供进一步的帮助。

好的,根据您的评论,我会尝试这样的事情

SELECT  C.ClientID ,
        C.ClientName ,
        C.OrganizationName,
        C.FirstName ,
        S.SMSOverageRate ,
        '' as Cost ,
        Count(*) as TotalLeads ,
        Sum(CASE DeliveryViaFax WHEN 'Y' THEN 1 ELSE 0 END) AS FaxCount ,
        Sum(CASE DeliveryViaSMSEmail WHEN 'Y' THEN 1 ELSE 0 END) AS SMSCount 
FROM    CMN_LeadSaleDetails S INNER JOIN 
        CMN_LeadClients C ON C.ClientID = S.BuyerID 
WHERE   C.SellerTenantId = @TenantId 
AND     S.SellerJournalID = CASE @JournalId WHEN 0 THEN S.SellerJournalID ELSE @JournalId END 
GROUP BY C.ClientID ,
        C.ClientName ,
        C.OrganizationName,
        C.FirstName ,
        S.SMSOverageRate
HAVING  (   Sum(CASE DeliveryViaFax WHEN 'Y' THEN 1 ELSE 0 END) != 0
        OR  Sum(CASE DeliveryViaSMSEmail WHEN 'Y' THEN 1 ELSE 0 END) != 0)

答案 1 :(得分:2)

可替换地..

Select *
From TABLE
Where (SMSLeads + FaxLeads) > 0

使用您的SQL

Select C.ClientID ,C.ClientName ,C.OrganizationName 
C.FirstName ,S.SMSOverageRate ,'' as Cost,
Count(*) as TotalLeads ,
Sum(CASE DeliveryViaFax WHEN 'Y' THEN 1 ELSE 0 END) AS FaxCount ,
Sum(CASE DeliveryViaSMSEmail WHEN 'Y' THEN 1 ELSE 0 END) AS SMSCount

FROM CMN_LeadSaleDetails S INNER JOIN CMN_LeadClients C ON C.ClientID = S.BuyerID WHERE C.SellerTenantId = @TenantId AND S.SellerJournalID = CASE @JournalId WHEN 0 THEN S.SellerJournalID ELSE @JournalId Group By C.ClientID ,C.ClientName ,C.OrganizationName C.FirstName ,S.SMSOverageRate Having (FaxCount+SMSCount) > 0