2012-04-27 273 views
1

嗯,我可能已經發布了此前也,但無法找到答案,所以請幫助我在這一個。需要幫助我的SQL查詢

我的數據庫結構:

ATTActivity表)

  • Act_ID(PK)
  • Assigned_To_ID(FK,參考Emp_ID
  • PROJECT_ID(FK,參考Project_ID
  • Product_ID(FK,參考Product_ID
  • 狀態(可以是New, OnHold, Cancel, Closed

Product_Table

  • PRODUCT_ID(PK)
  • PRODUCT_NAME

Project_Table

  • PROJECT_ID(PK)
  • PROJECT_NAME

Employee_Table

  • EMP_ID(PK)
  • F_Name。

約束

  • 在1個項目 - >多個員工可以工作
  • 1名員工 - >可以分配多個活動(Act_ID
  • 在任何給定時間點Status可以是任何給定值

現在在我的SQL查詢我想要做的是負載檢查::

的活動(由Act_ID表示)被分配給僱員被Assigned_To_ID表示,項目(Project_IDATT_Table)和特定狀態。我需要輸出從我的SQL查詢5個值:

  1. 員工
  2. 項目
  3. 活動共計僱員的義務(一)分配數的名稱。
  4. 員工(A)中分配的活動數量爲狀態爲新建或進程中的活動數量。
  5. 加載。這將是= C/d * 100(C比d更大的價值,這是顯而易見的。)

現在有可能是僱員假設E1正在項目P1,P2的條件。所以,我的表輸出將是這個樣子::

A B  C D  E 
E1 P1  
E1 P2 

所以在這裏C,d,E將具有與活動爲該項目(P1或P2)

我有這個到目前爲止已經試過值::

SELECT 
    F_Name AS A, 
    Project_Name AS B, 
    Count(Act_ID) AS C, 
    Count(Act_ID) AS D 
FROM 
    Employee_Table, ATT_Table, Project_Table 
WHERE 
    ATT_table.[Assigned_To_ID] = Employee_Table.[Emp_ID] 
    AND Project_Table.[Project_ID] = ATT_Table.[Project_ID] 
    AND Count(Act_ID) IN (SELECT Count(Act_ID) 
          FROM ATT_Table 
          WHERE ATT_Table.[Status] <> 'Closed' 
          AND ATT_Table.[Status] <> 'OnHold') 
GROUP BY 
    F_Name, Project_Name; 

我得到A,B,C。但是,當我試圖找到狀態檢查活動,因爲它給了我一個消息,不能寫在數WHERE子句我不能執行這個查詢。請幫助我解決這個問題。 謝謝..

回答

1

你提到Product_Table,但我不認爲這表是如何參與你的問題。其餘部分,我會從子查詢中提取列A,B,C和D,並在外部查詢中計算E.

SELECT 
    sub.F_Name AS A, 
    sub.Project_Name AS B, 
    sub.C, 
    sub.D, 
    ((sub.C/sub.D) * 100) AS E 
FROM 
    (
     SELECT 
      Emp.F_Name, 
      Proj.Project_Name, 
      Count(att.Act_ID) AS C, 
      Sum(IIf(att.Status IN ('New', 'InProcess'), 1, 0)) AS D 
     FROM 
      (ATT_Table AS att 
      INNER JOIN Employee_Table AS Emp 
      ON Emp.Emp_ID = att.Assigned_To_ID) 
      INNER JOIN Project_Table AS Proj 
      ON Proj.Project_ID = att.Project_ID 
     GROUP BY 
      Emp.F_Name, 
      Proj.Project_Name 
    ) AS sub; 
+0

雅......我很抱歉。 Product_Table不涉及。我的錯誤.. – 2012-04-29 08:36:50

+0

先生,我有這個1權利。但是,今天我知道我的需求有一點變化,所以我發佈了一個新問題,它只與這個問題有關。我已經把這個標記爲答案,因爲這個問題很好。我給你的鏈接http://stackoverflow.com/questions/10373043/need-to-write-an-sql-query謝謝。 – 2012-04-29 14:43:19

1
SELECT 
     E1.F_Name AS A, 
     P1.Project_Name AS B, 
     Count(A1.Act_ID) AS C, 
     sum(IF(A1.Status IN ('Closed', 'OnHold'), 0, 1)) as D, 
     (Count(A1.Act_ID)/sum(IIF(A1.Status IN ('Closed', 'OnHold'), 0, 1))) * 100 as E 
    FROM 
     ATT_Table A1 
     JOIN Employee_Table E1 
      ON A1.Assigned_To_ID = E1.Emp_ID 
     JOIN Project_Table P1 
      ON A1.Project_ID = P1.Project_ID 
    GROUP BY 
     F_Name, Project_Name; 
+0

那麼,先生謝謝您的回覆。但是,當我在SQL查詢嚮導中的MSaccess中運行它時。我在FROM子句中收到類似語法錯誤的錯誤,然後將其指向我在FROM子句中寫入的JOIN。並且還會出現「未定義的函數IF」錯誤。有一件事我注意到你寫了S1.Status ..但是S1在哪裏?請幫忙。再次感謝。 – 2012-04-28 05:55:00

+0

@ user1230183,對不起,您沒有「TAG」分配,這是一個ACCESS查詢。它們的語法略有不同。我從SUM(IF())改爲SUM(IIF()) – DRapp 2012-04-28 11:33:35

+0

但是'S1'別名呢?你可能是指'A1'而不是? – 2012-04-28 13:06:47

1

也許這樣。試試吧....

Select Emp.F_Name As A, 
    Proj.Project_Name As B, 
    Count(ATT.Act_ID) As C, 
    sum(IIF(ATT.Status IN ('Closed', 'OnHold'), 0, 1)) as D, 
    (Count(ATT.Act_ID)/sum(IIF(ATT.Status IN ('Closed', 'OnHold'), 0, 1))) * 100 as E 
From Employee_Table As Emp Inner Join 
    (Product_Table As Prod Inner Join 
    (ATT_Table As ATT Inner Join Project_Table As Proj On Proj.Project_ID=ATT.Project_ID) 
    On Prod.Product_ID=ATT.Product_ID) 
    On Emp.Emp_ID=ATT.Assigned_To_ID 
Group By Emp.F_Name,Proj.Project_Name 
+0

先生,今天我gt知道一點點改變我的要求,所以我有發佈了一個新問題,它只與這個問題有關。你能幫我這個http://stackoverflow.com/questions/10373043/need-to-write-an-sql-query謝謝。 – 2012-04-29 14:44:51