【发布时间】:2016-03-27 18:53:05
【问题描述】:
我正在尝试创建一份报告,显示工作中出现问题的原因,例如货物损坏、未送达等。
select
group_concat(distinct
concat(
'sum((select count(jp1.MemReason) from job_pieces jp1
left join unapprovedquotereasons un1 on un1.Description =jp1.MemReason
where jp1.jobid=jn.id and un1.Code=''',
un.Code,
''')) AS `',
un.Code, '`'
)
) into @sql
FROM customer c
LEFT JOIN job_new jn ON jn.JobOwnerID = c.ID
LEFT JOIN job_pieces jp ON jp.JobID = jn.ID
LEFT JOIN unapprovedquotereasons un on un.Description = jp.DebriefReason
WHERE c.Company_ID = 171;
因此,这条 sql 语句将原因显示为标题,并在此列下显示每个公司使用该原因的次数:
所以在图片中我们可以看到第二家公司两次使用了“损坏”的原因。
我遇到的问题是原因也保存在数据库的不同表中。所以我还需要从job_new 表中计算一个名为MemOutturnReason 的字段。如何将这两个字段加在一起?
生成的 SQL:
select
sum((select count(jp1.MemReason) from job_pieces jp1
left join unapprovedquotereasons un1 on un1.Description =jp1.MemReason
where jp1.jobid=jn.id and un1.Code='DAM')) AS `DAM`,sum((select count(jp1.MemReason) from job_pieces jp1
left join unapprovedquotereasons un1 on un1.Description =jp1.MemReason
where jp1.jobid=jn.id and un1.Code='SIZE')) AS `SIZE`,sum((select count(jp1.MemReason) from job_pieces jp1
left join unapprovedquotereasons un1 on un1.Description =jp1.MemReason
where jp1.jobid=jn.id and un1.Code='GOODS')) AS `GOODS`,sum((select count(jp1.MemReason) from job_pieces jp1
left join unapprovedquotereasons un1 on un1.Description =jp1.MemReason
where jp1.jobid=jn.id and un1.Code='NOTREV')) AS `NOTREV`
FROM customer c
LEFT JOIN job_new jn ON jn.JobOwnerID = c.ID
WHERE jn.IsActive = 1 AND c.Company_ID = 171 GROUP BY jn.JobOwnerID
【问题讨论】:
-
可以粘贴生成的SQL吗?这将有助于了解正在运行的具体内容以及如何更改它
-
@vmachan 我将生成的 SQL 添加到问题中。
标签: mysql count sum concat group-concat