Mysql 使用GROUPBY时的用例

Mysql 使用GROUPBY时的用例,mysql,sql,group-by,case,Mysql,Sql,Group By,Case,背景:我试图显示一个标题为:id、全名、职位7、职位8、职位9……的表格。如果一个人在7月和8月是在职员工,那么2012年7月和2012年8月将在一行的职位7和8上显示。如果我不使用GROUPBY,我会得到输出,但有两行。之所以会出现这种情况,是因为在BLMths表中,一个人由于受雇超过1个月,将有多个条目 如果我不使用GROUP BY,下面的查询将成功获取每个人的id、全名和月份。但问题是,如果我忽略使用GROUPBY,我的表中每个人将有4行(或更多)。当我使用GROUPBY时,每个人都有一行

背景:我试图显示一个标题为:id、全名、职位7、职位8、职位9……的表格。如果一个人在7月和8月是在职员工,那么2012年7月和2012年8月将在一行的职位7和8上显示。如果我不使用GROUPBY,我会得到输出,但有两行。之所以会出现这种情况,是因为在BLMths表中,一个人由于受雇超过1个月,将有多个条目

如果我不使用GROUP BY,下面的查询将成功获取每个人的id、全名和月份。但问题是,如果我忽略使用GROUPBY,我的表中每个人将有4行(或更多)。当我使用GROUPBY时,每个人都有一行的期望输出,但表中所需的数据并不全在那里

有人知道我做错了什么吗?或者有人知道为什么当我使用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

你需要更具体一些。这是针对什么数据库的?它以什么方式不起作用?是否发生了错误或未返回所需的结果?“我需要的数据不全在表中”是什么意思

如果每人有多个记录,会发生什么情况?您希望如何聚合数据

我猜你可能想要这样的东西(简称):

这给出了该人每月的记录


我看不到您正在查找的数据示例-您可以重新发布吗?

我正在尝试显示一个如下表:@KahlilN:请不要将这些信息放入注释中,而是编辑您的问题。请回顾现有的答案,并给出反馈,如果它们有效,或者有什么问题。@PeterLang-谢谢你的建议。我已经编辑了问题并删除了评论。我正在使用MYSQL,下面的查询出现了一些错误。我开始得到错误“字段列表中的未知列”,当我得到“组语句中的未知列GRPBYCOL”时。除此之外,上面的查询正是我想要做的,它工作得非常完美!非常感谢:)
 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 
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