我有一個SQL語句,它提供了作業中的債權人列表。 在圖中的例子中,兩個債權人都屬於同一個工作。 因此,在顯示TOTALS的最後一行中,作業數量爲1,這是正確的,因爲它是相同的作業。此外,說NotPOD的列也是正確的,只說1。 但是對於所有其他列,它將添加總計。就像說FL的列(它是一種類型的)。這項工作只有1個FL件類型。但由於這項工作有兩個債權人,即使只有一個債權人存在,總數也會顯示兩個。WITH ROLLUP不計算某些列上的總計
我不知道總計如何工作和NotPOD正確的。
這裏是SQL語句:
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' at then end - 在所有正在進行的遊戲之後查看SQL可能會很有幫助。 –