簡體   English   中英

基於COUNT()結果的條件AND語句

[英]Conditional AND statement based on results of COUNT()

我迷失在查詢的邏輯中,我需要一些幫助。 首先,我有一個父表Campaigns 然后,子表CampaignParks如下所示:

select * from CampaignParks

在此處輸入圖片說明

出於業務原因,我不會厭煩您,即使我們沒有將公園包括在Campaign中,也需要將Parks包括在Campaign表中。 要將其實際包含在廣告系列中,有一個標記。 沒有,一個或多個公園可能被設置為“包含在廣告系列中”。

好。 很簡單。 現在...

給定一個@ParkID,我需要返回所有與ParkID匹配的父級Campaign,但只有為該Campaign設置了一個(或多個) IncludeInCampaign標志時,才可以返回。 如果沒有為給定的活動設置IncludeInCampaign標志,那么我們將忽略@Parks的值。 我們不在乎。

例子:

  • @ParkID =11070。我們返回4和1
  • @ParkID =11526。我們取回1
  • @ParkID =26496。我們取回1
  • @ParkID =空。 我們回來4&1
  • ParkID =69。我們返回1。

因此,我認為查詢將如下所示:

SELECT
    DISTINCT
    sc.ContactID,
    cp.*
FROM
    Campaigns sc
    JOIN CampaignParks cp on sc.CampaignID = cp.CampaignID
WHERE 
    ((SELECT COUNT(*) FROM CampaignParks cp2 WHERE cp2.CampaignID = sc.CampaignID AND cp2.IncludeInCampaign = 1) > 0 OR cp.ParkID = @ParkID)

但是,這並沒有給我正確的結果。

(我需要帶我的女兒去體操……回來時我會看看身體的依賴。謝謝!!!)

我認為您的代碼已接近。 主要區別在於WHERE子句中的ANDOR

SELECT sc.ContactID, cp.*
FROM Campaigns c JOIN
     CampaignParks cp
     on sc.CampaignID = cp.CampaignID
WHERE cp.ParkId = @ParkId AND
      EXISTS (SELECT 1
              FROM CampaignParks cp2
              WHERE cp2.CampaignID = cp.CampaignID AND
                    cp2.IncludeInCampaign = 1
             );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM