2012-11-05 157 views
1

背景:如果一個人是7月和8月的活躍員工,我試圖顯示標題爲:id,full_name,position_7,position_8,position_9等的表格,然後2012_Jul 2012_Aug將在position_7和8中顯示在一行上。如果我不使用GROUP BY,我會得到輸出,但在2行。發生這種情況的原因是因爲在BLMths表中,一個人由於被僱用超過1個月而將有多個條目。使用CASE WHEN和GROUP BY

以下查詢將成功獲取每個人的id,full_name和month ...如果我不使用GROUP BY。但問題是,如果我忽略使用GROUP BY,我的表中每個人都有4行(或更多)。當我使用GROUP BY時,每個人都有一行所需的輸出,但我在表中所需的數據並不全部存在。

有誰知道我在做什麼錯?或者有人知道爲什麼當我使用GROUP BY時,我的一些CASE語句中的數據似乎缺失了嗎?

我知道這個答案很簡單,但我似乎無法解決它。任何幫助表示讚賞。提前謝謝了。

SELECT Blm.Ags, Blmths.Id, Ie.Full_Name, Blmths.Month, 
     CASE month 
     WHEN "2012-07-01" THEN 1 
      ELSE NULL 
     END AS Position_7, 
     CASE month 
     WHEN "2012-08-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_8, 
     CASE Blmths.Month 
     WHEN "2012-09-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_9, 
     CASE month 
     WHEN "2012-10-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_10, 
     CASE Blmths.Month 
     WHEN "2012-11-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_11, 
     CASE Blmths.Month 
     WHEN "2012-12-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_12, 
     CASE month 
     WHEN '2013-01-01' THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_1, 
     CASE month 
     WHEN "2013-02-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_2, 
     CASE month 
     WHEN "2012-03-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_3, 
     CASE Blmths.Month 
     WHEN "2013-04-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_4, 
     CASE Blmths.Month 
     WHEN "2013-05-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_5, 
     CASE Blmths.Month 
     WHEN "2013-06-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
      ELSE NULL 
     END AS Position_6 
    FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie, 
Bogus_Leadership_Members AS Blm 
    WHERE Blmths.Id = Blm.Id 
    AND Ie.Ags = Blm.Ags 
    AND Ie.Centre_Id = '666' 
    GROUP BY Blm.Ags 
+2

你想做什麼? –

+0

我試圖顯示一張如下所示的表: –

+0

@KahlilN:請不要將這些信息放入註釋中,而是編輯您的問題。請檢查現有答案,並在他們工作時提供反饋,或者他們有什麼問題。 –

回答

1

你需要更具體。這是什麼數據庫?它以什麼方式不起作用?發生了錯誤還是沒有返回所需的結果? '我在桌上需要的數據不是全部'是什麼意思?

如果每個人有多個記錄會發生什麼情況,您想如何聚合的數據?

我猜你可能沿着這些線路(縮短)的東西:

SELECT Blm.Ags, Blmths.Id, Ie.Full_Name, 
    SUM(CASE Blmths.month 
    WHEN "2012-07-01" THEN 1 
     ELSE NULL 
    END) AS Position_7 
FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie, 
Bogus_Leadership_Members AS Blm 
    WHERE Blmths.Id = Blm.Id 
    AND Ie.Ags = Blm.Ags 
    AND Ie.Centre_Id = '666' 
    GROUP BY Blm.Ags, Blmths.Id, Ie.Full_Name 

這給了每月的那個人的理貨。

我看不到您之後的數據示例 - 您可以重新發布嗎?

+0

我正在使用MYSQL,並在下面的查詢中發生了一些錯誤。我開始收到錯誤「字段列表中的未知列」,當時我得到了「組列表中的未知列GRPBYCOL」。除此之外,上面的查詢是**完全**我正在嘗試做什麼,它的工作原理**完美!**非常感謝你:) –

0
SELECT max(Blmths.Id), Ie.Full_Name, Blmths.Month,Blm.Ags FROM 
    (SELECT Blm.Ags,Blmths.Id, Ie.Full_Name, Blmths.Month 
    CASE month 
      WHEN "2012-07-01" THEN 1 
       ELSE NULL 
      END AS Position_7, 
      CASE month 
      WHEN "2012-08-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_8, 
      CASE Blmths.Month 
      WHEN "2012-09-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_9, 
      CASE month 
      WHEN "2012-10-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_10, 
      CASE Blmths.Month 
      WHEN "2012-11-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_11, 
      CASE Blmths.Month 
      WHEN "2012-12-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_12, 
      CASE month 
      WHEN '2013-01-01' THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_1, 
      CASE month 
      WHEN "2013-02-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_2, 
      CASE month 
      WHEN "2012-03-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_3, 
      CASE Blmths.Month 
      WHEN "2013-04-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_4, 
      CASE Blmths.Month 
      WHEN "2013-05-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_5, 
      CASE Blmths.Month 
      WHEN "2013-06-01" THEN Date_Format(Blmths.Month, '%Y_%b') 
       ELSE NULL 
      END AS Position_6 
     FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie, 
    Bogus_Leadership_Members AS Blm 
     WHERE Blmths.Id = Blm.Id 
     AND Ie.Ags = Blm.Ags 
     AND Ie.Centre_Id = '666') AS GRPBYCOL 
    GROUP BY Ie.Full_Name, Blmths.Month,Blm.Ags,GRPBYCOL 
+0

感謝您的幫助。此查詢不起作用。 –