- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 SQL 语句,它给出了工作债权人的列表。在图像中的示例中,两个债权人都属于同一份工作。所以在显示 TOTALS 的最后一行,作业数是 1,这是正确的,因为它是同一个作业。同样,表示 NotPOD 的列也是正确的,仅表示 1。但对于所有其他列,它正在添加总计。就像写着 FL 的专栏(它是一 block 类型)。此作业只有 1 个 FL 件类型。但由于该工作有两个债权人,即使只有一个债权人,总数也显示为两个。
我不知道作业和 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
最佳答案
当您使用 count(distinct)
和 sum
时,with rollup
标志会做不同的事情。
对于COUNT(distinct jn.ID)
,它将为您提供所有显示数据中不同Jobids 的数量。这可能就是您想要的。
对于像 sum(case...) as POD
这样的总和列,它只会为您提供所有显示值的总和 - 如果作业具有状态“POD”。
至于 NotPOD-Column:我假设您只是在您的客户端中计算它(可能作为 Jobs - POD),并且由于 POD 为 0(虽然可能是 2),它看起来不错。我假设您也在您的客户中计算“单位”(作为 4 种类型的总和)。如果不是,则您的代码不适合您的图片。
那么怎么解决呢?
嗯,基本上你不能使用with rollup
,主要是因为你不想得到显示值的总和,这就是with rollup
> 是为了。
最简单的解决方案是手动计算总行并将它们与 union
合并,例如像这样:
select c.Name as Name,
COUNT(distinct jn.ID) as Jobs,
...
sum(jn.OutTurn) as Outturn,
SUM(jn.ActualWeight) as GrossWt,
...
FROM creditor c
LEFT JOIN invoicedetail i on c.ID = i.creditorId
LEFT JOIN job_new jn ON i.JobID = jn.ID
-- !!! DO NOT USE LEFT JOIN job_pieces jp ON jp.JobID = jn.ID !!!
-- !!! DO NOT USE LEFT JOIN piecestype pt on jp.TypeID = pt.ID !!!
WHERE c.Company_ID = ', ?compid, GROUP BY c.Name, '
UNION
''Total'',
COUNT(distinct jn.ID) as Jobs,
...
sum(jn.OutTurn) as Outturn,
SUM(jn.ActualWeight) as GrossWt,
...
-- you have to figure out what number you need here for the pieces
-- you probably want to seperate that part too (as you did with @sql)
-- (select sum(jp1.AdvisedQty) from job_pieces jp1 ... ) as FL
...
from job_new jn
WHERE exists(select 1
FROM creditor c
JOIN invoicedetail i on c.ID = i.creditorId
where i.JobID = jn.ID and c.Company_ID = ', ?compid, '
)
第二部分没有group by
!你必须弄清楚你想要的每件总和的值,你可能想用类似于你的 select 的语句来准备它们
group_concat(不同的...
还有一个警告:如果我正确理解你的数据模型,你绝对必须删除
LEFT JOIN job_pieces jp ON jp.JobID = jn.ID
LEFT JOIN piecestype pt on jp.TypeID = pt.ID
语句,因为当您在一份工作中有多个工作件或件类型时,它们会破坏您的值(value)观(您可以尝试向工作添加第二个值(value)并查看)。如果您有可能在一个 invoicedetail
上有两次相同的工作,您也必须修复该部分。
请注意,在联合部分,您不能加入客户(您会多次计算所有内容)。
关于mysql - WITH ROLLUP 不计算某些列的总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36646439/
我需要一些帮助。 我希望“总计”由“数量*价格=总计”计算(到目前为止没问题)。问题是我还需要通过“总/价格=数量”来计算“数量”,即如果一个字段发生更改,另一个字段也会自动更改。 我做了一个非常简单
我的项目即将结束,但在解决它时遇到了一些问题。我是一名厨师,想要自己的应用程序与他自己的业务相关 我的表单称为“菜谱”,并包含数量、单价、使用百分比。 假设您有 1 公斤苹果,价格为 5 欧元。清洁结
我的数据库表是: 产品展示 - ID - 名称 ... 订单 - ID - 状态 ... OrderItems - ID -order_id -product_id -数量 -line_total 我
我的项目即将结束,但在解决它时遇到了一些问题。我是一名厨师,想要自己的应用程序与他自己的业务相关 我的表单称为“菜谱”,并包含数量、单价、使用百分比。 假设您有 1 公斤苹果,价格为 5 欧元。清洁结
exchanges表结构: id exchange created_at updated_at deleted_at start_time
我正在开发 Telerik RadGrid,网格内有多个 radtextbox,如 A、B、C 和 D。我使用带有正则表达式验证的 radtextbox 来验证带有数字的 A、B 和 C 文本框。然而
我有一个非常简单的$lookup聚合查询,如下所示: {'$lookup': {'from': 'edge', 'localField': 'gid', 'foreignField': 't
我正在尝试做一些与我之前问过的问题非常相似的事情,但我似乎无法让它正常工作。这是我之前的问题:How to get totals per day 表格如下: Table N
[更新] 谢谢大家,最终代码: var EUR_share_cost = 0; var USD_share_cost = 0; var GBP_shar
由于某种原因,下面的这部分代码没有将每个数组项添加到一起。我单步执行调试器,正在创建并递增数组项,但 total += ScoreArray[i]; 似乎没有将已输入的数字相加。相反,我只是将第一个输
我在这里有点迷路了。我有一个 for 循环,它增加一个值,如下所示: int nu01 = 10000; int level = 0; int increase = 35000; for (int i
请引用之前的问题:Sum total for column in jQuery 我使用了 Aymen 的解决方案,但我对其进行了编辑以满足我的需要。它停止工作,我的代码如下所示,在 jsfiddle
Date Flight ID Member ID Seat Type Seat Price 2013-07-28 F71498 M692
我希望程序忽略零总数。我正试图阻止向非参与者提供零总数的汽车奖励。我在 && 运算符后面添加了 >= 表达式。这对于击杀数和净值来说正确吗? $fetch_nor_killers = mysq
我有下表: CREATE TABLE zoom (`id` int, `fb_id` int, `date` datetime); INSERT INTO zoom (`id`, `f
我想知道是否有一种方法可以将已计算的派生列的总和添加到新列中。 Employee_KT_State --------------------------------------------------
在 SQL 中,我想获得来自每个用户的网站点击率的百分比。为此,我需要获取 site hits 列的总和,但我的查询在另一列上使用了 GROUP By。 除了 GROUP BY 中的每个 user_i
我有以下查询: SELECT SUM(case when s1 = 'fel' then 1 else 0 end) as s1_count, SUM(case when s2 = '
我已经使用 HTML 创建了一个表格。该表由一个标题和许多称为 Family 的行组成。每个家庭行可以有许多行代表家庭的各个成员(请参见下面的代码)。 Family N
如何使用 javascript 给出 float 总计。请 friend 们帮助我。 function addNumbers() {
我是一名优秀的程序员,十分优秀!