背景:我试图显示一个表格,标题是:id,全名,职位7,职位8,职位9…等如果一个人是7月和8月的在职员工,那么2012年7月和2012年8月将显示在一行的职位7和8。如果不使用GROUP BY,我会得到两行输出。之所以会发生这种情况,是因为在BLMths表中,一个人由于被雇用超过一个月而有多个条目。
下面的查询将成功获取每个人的id、全名和月份…如果我不使用GROUP BY。但问题是,如果我忽略了使用GROUPBY,我的表中每个人有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
最佳答案
你需要更具体一点。这是针对哪个数据库的?它以什么方式不起作用?是否发生错误或未返回所需的结果?“我需要的数据不全在这里”是什么意思?
如果每人有多条记录,您希望如何聚合数据?
我猜你可能想要这样的东西(缩写):
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
这是那个人每月的记录。
我看不到你要找的数据的例子-你能重新发布吗?