【问题标题】:how to add two fields from different tables together SQL如何将来自不同表的两个字段添加在一起SQL
【发布时间】: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


【解决方案1】:

我不确定您的数据库表中的字段,希望这会给您一个想法。这是一个伪代码。尝试根据您的数据库表和字段进行修改,

   SELECT c.name as Name, count(jp.MemReason) as DAMAGED, count(jp.something) as PROB
   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
   GROUP BY c.Company_ID;

【讨论】:

  • 如果jp.MemReasonjn.MemOutturnReason有相同的描述,我基本上只需要加在一起就可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 2016-01-15
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多