2014-05-05 72 views
1

我是這個遊戲的新手,花了一些時間來學習基礎知識。但是,我有限的SQL知識使我無法嘗試構建一個稍微複雜的查詢。現在我將嘗試解釋(非常感謝幫助)。SQL Server爲子查詢檢索字段名稱

我有兩個表這是設置如下

表1

PrjName | StartDate| MidDate | EndDate 

----------------------------------------- 
    abc | 01/01/2014| 11/03/2014| 06/05/2014 

    def | 21/03/2014| 19/05/2014| 16/11/2014 

    ghi | 15/07/2014| 20/10/2014| 20/12/2014 

    jkl | 04/02/2014| 09/06/2014| 30/09/2014 

表2

PrjName | Phase | Outcome 

----------------------------------------- 
    abc | StartDate | Green 

    ghi | MidDate | Yellow 

    def | EndDate | Green 

    jkl | StartDate | Red 

,我想創建應符合下列查詢條件:

  • 如果當前日期在表1中的某個範圍內,那麼返回列名和PrjName 當前的日期2014年5月10日= - >將返回「GHI & MidDate」和「DEF &結束日期」
  • 從這個查詢的結果將隨後在子查詢被用來找到對應結果計數 例如使用前面的條件--->將返回「1計數黃色& 1計數綠色」 這些子查詢輸出也將按照「階段」和「結果」分組,因此輸出表將如下所示:

表3

顯然表將包含幾個「階段」和更多的「成果」,但總的原則是一樣的。

我可以很容易地得到表3,但不使用從表1派生的條件,即FieldName(例如MidDate)和PrjName。

回答

0

你的問題不清楚你在計算什麼。它是階段還是OutCome?無論如何,我假定你正在計數階段並寫下這些查詢。這些檢查和與SQL Server確認您提供完美工作2008年

查詢1

SELECT t2.PrjName,t2.Phase,t2.OutCome 
FROM Table1 t1 
Inner Join 
Table2 t2 
ON t1.PrjName = t2.PrjName 
Where t1.StartDate <= GETDATE() 
AND t1.EndDate >= GETDATE() 

QUERY2

SELECT t2.Phase,t2.OutCome, COUNT(t2.OutCome)as [Count] 
FROM Table1 t1 
Inner Join 
Table2 t2 
ON t1.PrjName = t2.PrjName 
Where t1.StartDate <= GETDATE() 
AND t1.EndDate >= GETDATE() 
Group by t2.Phase,t2.OutCome 
+0

的代碼! 我需要一段時間來解決這些JOIN操作。這一點代碼對我來說將是一個很長的路要走。 – steambop