ジョブ上の債権者のリストを提供するSQLステートメントがあります。 イメージの例では、両方の債権者が同じジョブに属しています。 したがって、TOTALSを表示している最後の行では、同じジョブであるため、ジョブの数は1です。また、NotPODと言う列も、ちょうど1と言って正しいです。 しかし、他のすべての列については、合計を追加しています。 FL(それはピースタイプです)と呼ばれる列のように。この仕事には1枚のFLピースタイプしかありません。しかし、仕事には2人の債権者がいるので、1つしか存在しないにもかかわらず、合計は2つを表示しています。WITH ROLLUPは一部の列で合計を計算していません
私は、合計が仕事とNotPODのための正しい方法を知りません。私はあなたの問題は、条件によってあなたのグループであることを疑う
SET group_concat_max_len=10000000;
set @sql = null;
select
group_concat(distinct
concat(
'sum((select sum(jp1.AdvisedQty)
from job_pieces jp1
left join piecestype pt1 on jp1.TypeID = pt1.ID
where jp1.jobid=jn.id and pt1.code=''', pt.Code , '''
)) AS `', pt.Code, '`'
)
) into @sql
FROM creditor c
LEFT JOIN invoicedetail i on c.ID = i.creditorId
LEFT JOIN job_new jn ON i.JobID = jn.ID
LEFT JOIN job_pieces jp ON jp.JobID = jn.ID
LEFT JOIN piecestype pt on jp.TypeID = pt.ID
WHERE c.Company_ID = ?compid;
set @sql = concat('select
ifnull(c.Name,''TOTAL'') as Name,
COUNT(distinct jn.ID) as Jobs,
sum(case when (select count(jbs.status) from jobstat jbs
where jbs.jobid=jn.id and jbs.Status=''DEL'')>0
then 1 else 0 end) as Delivered,
sum(case when (select count(jbs.status) from jobstat jbs
where jbs.jobid=jn.id and jbs.Status=''POD'')>0
then 1 else 0 end) as POD,
SUM((select COUNT(ID) from job_debriefs
WHERE JobID = jn.ID)) as Debriefs,
sum(jn.OutTurn) as Outturn,
SUM(jn.ActualWeight) as GrossWt,
', @sql, '
FROM creditor c
LEFT JOIN invoicedetail i on c.ID = i.creditorId
LEFT JOIN job_new jn ON i.JobID = jn.ID
LEFT JOIN job_pieces jp ON jp.JobID = jn.ID
LEFT JOIN piecestype pt on jp.TypeID = pt.ID
WHERE c.Company_ID = ', ?compid, GROUP BY c.Name WITH ROLLUP
クエリをフォーマットすることはできますか? –
@GordonLinoff申し訳ありませんが、どういう意味ですか? – user123456789
それから 'SELECT @ sql'を終わりに - それは起こっているすべてのゲームの後にSQLを見ると役立つかもしれません。 –