2012-08-10 77 views
0

我希望有人可以在這裏提供幫助和一些建議。我試圖得到一個相當複雜的結果,並不確定我是否可以將它作爲一個帶有子查詢,聯合的查詢來完成,或者只是將單獨的查詢合併到事後的Excel中。計算部分值或條件值

我從我的前任與下表中的遺留數據庫工作: 業務(列有工作:ID,部門,國家) 形式(與工作列:提交(Y/N),身份證,business_id ) 庫存(柱的工作:IN_STOCK(Y/N),身份證,form_id)

我試圖得到一個最終的結果,看起來像這樣:

| SubmittedForms | Unsubmitted Forms | Sector | State | 
|-----------------------------------------------------| 
|  10  |   5   | Agr | UT | 
|  0  |   7   | Chem | MT | 
|  2  |   1   | Bio | OK | 
|  13  |   0   | Chem | NM | 

主要的問題我得到的是雖然提交表單不需要任何進一步的參數,並且是一個簡單的計數,但未提交ms依賴於Inventory.in_stock ='Y'。這裏是我的查詢提交形式:

SELECT COUNT(Forms.id) AS Submitted, Business.sector, Business.state 
FROM Forms 
JOIN Business ON Forms.business_id=Business.id 
WHERE Forms.submitted='Y' 
GROUP BY Business.state, Business.sector 

不幸的是,我似乎無法獲得未提交的表格數量計算正確。它只返回那個扇區的in_stock爲Y的行的總數。

如果爲提交和取消提交運行單獨的查詢對於最終結果是很好的,但是我需要一些幫助來獲取正確數量的未提交表單,並將in_stock標記爲Y.此外,我試圖使用COUNT DISTINCT但時間過長,10分鐘後還在跑步。我可以在單個查詢選項中設想的另一個複雜因素是提交或未提交表單中0/null值的可能性

任何幫助都非常感謝!

回答

0

一個選項:

SELECT COUNT(CASE WHEN Forms.submitted = 'Y' THEN 1 END) SubmittedForms, 
     COUNT 
     (CASE WHEN Forms.submitted = 'N' 
       AND EXISTS (SELECT 1 
           FROM Inventory 
           WHERE form_id = Forms.id 
           AND in_stock = 'Y' 
          ) 
       THEN 1 
      END 
     ) UnsubmittedForms, 
     Business.sector Sector, 
     Business.state State 
    FROM Forms 
RIGHT 
OUTER 
    JOIN Business 
    ON Forms.business_id = Business.id 
GROUP 
    BY Business.sector, 
     Business.state 
; 

另一種選擇,這可能會表現得更好:

SELECT COUNT(CASE WHEN Forms.submitted = 'Y' THEN 1 END) SubmittedForms, 
     COUNT(CASE WHEN Forms.submitted = 'N' THEN 1 END) UnsubmittedForms, 
     Business.sector Sector, 
     Business.state State 
    FROM (SELECT * 
      FROM Forms 
      WHERE submitted = 'Y' 
      OR id IN (SELECT DISTINCT form_id 
          FROM Inventory 
          AND in_stock = 'Y' 
        ) 
     ) Forms 
RIGHT 
OUTER 
    JOIN Business 
    ON Forms.business_id = Business.id 
GROUP 
    BY Business.sector, 
     Business.state 
; 
+0

謝謝,這說明我怎麼得到一個結果提交/未提交列,但不會納入在未提交文檔的In_stock變量中。 – 2012-08-10 14:50:40

+0

@凱維諾:啊,對不起。所以,我很困惑。你寫到「未提交的表單依賴於Inventory.in_stock ='Y'」,但是你沒有解釋依賴關係*的含義。它看起來像'Inventory'是'Forms'的孩子,而不是其他方式;那麼你是否正在尋找一些未提交的表單,其中有* in_stock ='Y''的至少一個庫存記錄?或者你是否在尋找有'in_stock ='Y''屬於未提交表單的'庫存'記錄?要麼 。 。 。 ? – ruakh 2012-08-10 14:54:23

+0

我的歉意,回想起來你是對的,不清楚。是的,我的前任基本上處於層次結構:業務,表單,庫存,所以庫存是表單的一個孩子。我正在尋找一個未提交的表單,其中至少有一個具有'in_stock ='Y''的庫存記錄 – 2012-08-10 14:58:47