2014-04-23 120 views
1

目前我拉出Facilities其中permitType'Hazardous waste'licenseStatus'Open',但會有這樣的情況,其中設施將有一個以上的許可證類型假設一個工廠可以有兩種許可證類型要篩選SQL Server查詢

  1. 危險廢物(狀態 - OPEN)
  2. AST(OPEN)

,所以我不應該在我的輸出,如果另一個是對顯示這項設施除了'危險廢物'以外,還有其他許多類型(狀態 - 開放),但是如果其他許可類型具有狀態 - 關閉,那麼我的查詢應該輸出設施,即如果AST(狀態 - 關閉)則應該從數據庫中提取設施。

我寫了下面的查詢,但不知道在哪裏包括條件。

SELECT 
    e.facilityID 
    ,f.organization_core AS 'Facility Name' 
    ,f.address_full_core AS 'Facility Address' 
    ,a.permitNumber AS 'Permit Number' 
    ,b.permitName AS 'Permit Name' 
    ,a.licenseStatus AS 'Permit Status' 
    ,c.permitType AS 'Permit Type' 
FROM 
    tblPermits a 
LEFT JOIN 
    dbo.tblPermit_Names b ON a.permitID = b.permitID 
LEFT JOIN 
    dbo.tblLKP_Permit_Facilities d ON a.permitID = d.permitID 
LEFT JOIN 
    dbo.tblPermit_Types c ON a.permitTypeID = c.permitTypeID 
LEFT JOIN 
    dbo.tblFacility e ON d.facilityID = e.facilityID 
LEFT JOIN 
    dbo.tblAddresses f ON e.facilityAddressID = f.addressID 
WHERE 
    a.permitTypeID IN (SELECT permitTypeID 
         FROM dbo.tblPermit_Types 
         WHERE permitType IN ('Hazardous Waste')) 
    AND a.licenseStatus = 'Open' 
    AND isNull(a.deleted, 0) = 0 
+0

我很困惑你正在尋找什麼樣的條件。它是: 如果工廠有打開與地位的危險廢物許可證它被包含 如果它也有一個AST(開)不應該顯示 如果有AST(封閉的),而不是它應該顯示 所以你只想設施危險廢物(公開)是唯一的許可證? –

+0

此外,您的表格結構的清晰表示會有所幫助 –

+0

您的判斷正確無誤,我需要有危險廢物的設施(打開)以及任何其他許可證,例如AST(關閉)。如果該設施只有危險許可證並且已經開放,那麼我可以取得這些數據,但是如果同一設施有其他許可證,並且我必須根據其他許可證的打開或關閉來決定是否顯示沒有的設施。 – jeetu

回答

0

我想下面的查詢實現你的規則。 。我們的想法是把重點放在工廠,而不是你已經把表中的所有多餘的東西你需要通過facilityid彙總,以便應用邏輯來爲每一個發佈的所有許可證:

SELECT f.facilityID 
FROM dbo.tblFacility f join 
    dbo.tblLKP_Permit_Facilities pf 
    on pf.facilityID = f.facilityId join 
    tblPermits p 
    on pf.permitID = p.permitID join 
    dbo.tblPermit_Types pt 
    ON pt.permitTypeID = p.permitTypeID 
GROUP BY f.facilityID 
HAVING SUM(case when pt.permitType IN ('Hazardous Waste') and p.licenseStatus = 'Open' 
       then 1 else 0 
      end) > 0 and 
     SUM(case when pt.permitType NOT IN ('Hazardous Waste') and p.licenseStatus = 'Close' 
       then 1 else 0 
      end) > 0; 

having子句中的每個條件都適用您的一條規則。

+0

對不起,戈登這不是我正在尋找的。 – jeetu

+0

我想要有危險廢物的設施(打開)和任何其他許可證,如AST(關閉)。如果該設施只有危險許可證並且已經開放,那麼我可以取得這些數據,但是如果同一設施有其他許可證,並且我必須根據其他許可證的打開或關閉來決定是否顯示沒有的設施。 – jeetu

+0

@jeetu。 。 。這很容易用相同的方法表示。看看編輯。 –

0

我對你的表格結構有點困惑,但這是我認爲你應該做的。

你這裏的說法應該是在ID(從表中選擇ID,其中狀態=開放和count(ID)= 1 GROUP BY設施) 和類型(「危險廢物」)

的第一部分在這裏聲明將所有的標識符限制爲那些只有一個開放類型的設施,第二部分將其限制爲危險廢物。

如果您有一個擁有10個許可證的設施,但只有一個許可證被激活,它將把它列入清單,但如果活動許可證不是危險廢物,它將會排除它。

對不起,我不能給你確切的代碼。

此外,儘可能多的外部連接nix。內部連接速度更快,並且更有可能代表您想要的數據。

+0

謝謝你的回答。 但我想要的是,如果一個設施有10個許可證,並且如果有兩個許可證是活動的,其中一個是危險的,另一個是另一個也是活動的其他東西。所以在這種情況下,我不希望設備在查詢輸出中出現。 – jeetu

+0

如果有超過1個活動許可證,它將排除它(或者如果我有我的僞語法權利,它應該)。玩它,這會讓你接近 –