简体   繁体   English

MYSQL SELECT 多行合二为一

[英]MYSQL SELECT Multiple Rows into one row

Ok, this is complicated for me to get out there, but here we go.好的,这对我来说很复杂,但在这里我们是 go。

I have a family/person attendance table containing the following fields:我有一个包含以下字段的家庭/个人考勤表:

| | mail_no (FamilyID) | mail_no (FamilyID) | meid (Person ID) | meid (个人 ID) | date |日期 | status (A/P)|状态 (A/P)|

On the family attendance screen, I need to pull the data and group it in the following format:在家庭考勤屏幕上,我需要拉取数据并按以下格式分组:

meid美德 Jan Feb二月 Mar三月 Apr四月 May可能 Jun Jul七月 Aug八月 Sep九月 Oct十月 Nov十一月 Dec十二月
123 123 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
124 124 2 2 3 3 2 2 0 0 0 0 0 0 0 0 1 1 1 1 2 2 2 2 1 1

Currently, my PHP looks like this:目前,我的 PHP 看起来像这样:

$year = "2020";
$where_clause = "AND ATDATA.mail_no='".$myrow['mail_no']."' AND ATDATA.status='A'";

SELECT meid,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-01' ".$where_clause.") as month1,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-02' ".$where_clause.") as month2,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-03' ".$where_clause.") as month3,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-04' ".$where_clause.") as month4,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-05' ".$where_clause.") as month5,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-06' ".$where_clause.") as month6,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-07' ".$where_clause.") as month7,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-08' ".$where_clause.") as month8,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-09' ".$where_clause.") as month9,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-10' ".$where_clause.") as month10,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-11' ".$where_clause.") as month11,
    (SELECT COUNT(*) FROM ATDATA WHERE LEFT(ATDATA.date,7)= '".$year."-12' ".$where_clause.") as month12
  FROM ATDATA 
  WHERE ATDATA.mail_no='".$myrow['mail_no']."' AND ATDATA.status='A'
  GROUP BY meid,month1, month2, month3, month4"

I'm getting the following output, which has the meid's split per row, but the underlying data is grouped on mail_no.我得到以下 output,它具有每行的 meid 拆分,但基础数据在 mail_no 上分组。 How can I get the data grouped by meid instead?如何获取按 meid 分组的数据?

meid美德 Jan Feb二月 Mar三月 Apr四月 May可能 Jun Jul七月 Aug八月 Sep九月 Oct十月 Nov十一月 Dec十二月
1752 1752 5 5 7 7 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6
198 198 5 5 7 7 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6
199 199 5 5 7 7 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6

hmmm hey嗯嘿

Just group by 'meid', remove the months in the group by... Then do counts where month = Jan... month = Feb... in your select...只需按“meid”分组,按...删除组中的月份,然后在您的 select 中计算月份 = 一月... 月 = 二月...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM