2012-11-05 3 views
1

배경 : id, full_name, position_7, position_8, position_9 ... 표제가있는 테이블을 표시하려고합니다. 그 사람이 7 월과 8 월에 활성 직원 이었으면 2012_Jul 2012_Aug가 position_7 및 8에 한 줄에 표시됩니다. 내가 GROUP BY를 사용하지 않는다면 나는 출력을 얻지 만 2 라인을 얻는다. 이유는 BLMths 테이블에서 한 명 이상이 1 개월 이상 고용되어 여러 항목을 가지고 있기 때문입니다.사례가 GROUP과 함께 사용되는 경우

아래 쿼리는 GROUP BY를 사용하지 않으면 모든 사람 id, full_name 및 month를 성공적으로 가져옵니다. 그러나 문제는 GROUP BY를 사용하지 않으면 내 테이블에 각 사람마다 4 줄 (또는 그 이상)을 갖게된다는 것입니다. 내가 GROUP BY를 사용할 때, 나는 각 사람마다 1 라인의 원하는 출력을 가지지 만, 테이블에 필요한 데이터가 전부는 아니다.

내가 뭘 잘못하고 있는지 아는 사람이 있습니까? 아니면 누군가가 내 CASE 문 중 일부에서 데이터가 GROUP BY를 사용하여 누락 된 것처럼 보이는 이유를 알고 있습니까?

나는 이것에 대한 대답은 간단해야하지만 나는 그것을 해결할 수없는 것으로 알고있다. 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다.

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

좀 더 구체적으로해야합니다. 어떤 데이터베이스입니까? 어떤 방법으로 작동하지 않습니까? 오류가 발생 했습니까? 또는 필요한 결과를 반환하지 않았습니까? '테이블에 필요한 데이터가 모두 거기에 없다'는 것은 무엇입니까?

1 인당 2 개 이상의 레코드가있는 경우 어떻게됩니까 데이터를 어떻게 처리 하시겠습니까?

난 당신이 이 (단축)이 라인을 따라 뭔가를 할 수 있습니다 같은데요 :

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

도움을 주셔서 감사합니다. 이 쿼리가 작동하지 않았습니다. –

관련 문제