具有范围和条件的运行总计

问题描述 投票:0回答:2

我的SQL语法有问题,但我仍然是新手程序员,所以我不知道错误消息的含义。

这是我的代码:

set @csum = 0;
select b.nama as divisi, a.nama, a.tgl, a.act, a.L_mulai, a.L_selesai, a.tot_jam, a.ket, (CASE WHEN a.act = 'lembur' THEN @csum = @csum + a.tot_jam ELSE @csum = @csum - a.tot_jam ) as `total jam`
FROM tbl_rkp_lemburtj AS a
LEFT JOIN tbl_bagian AS b ON a.Divisi = b.id
WHERE a.nama = 'Rofiq'
order by a.id;

请告诉我该怎么做才能更正它。

这是我收到的错误消息:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') as `total jam` FROM tbl_rkp_lemburtj AS a LEFT JOIN tbl_bagian AS b ON a.Div' at line 1

我希望结果是这样的:enter image description here

列总阻塞与参数如果act是lembur相比加,否则,如果act是tj则减去

tot_jam的总计
mysql sql
2个回答
0
投票

您不需要variable即可获得sum(),请使用此查询。

select b.nama, a.nama, a.tgl, a.act, a.L_mulai, a.L_selesai, a.tot_jam, a.ket
    , sum(CASE WHEN a.act = 'lembur' THEN a.tot_jam ELSE 0 END) as `total jam`
FROM tbl_rkp_lemburtj AS a
LEFT JOIN tbl_bagian AS b ON a.Divisi = b.id
WHERE a.nama = 'Rofiq'
order by a.id;

0
投票

如果您要基于SUM()语句中的逻辑来获取CASE,则可以尝试如下操作:

SELECT b.nama, a.nama, a.tgl, a.act, a.L_mulai, a.L_selesai, a.tot_jam, a.ket, 
  SUM (
    CASE 
      WHEN a.act = 'lembur' THEN a.tot_jam -- Add "tot_jam"
      ELSE (-1) * a.tot_jam -- Subtract "tot_jam"
    END 
  ) AS total jam
FROM tbl_rkp_lemburtj AS a
LEFT JOIN tbl_bagian AS b ON a.Divisi = b.id
WHERE a.nama = 'Rofiq'
ORDER BY a.id
;

这将基于SUM()中的求值表达式对所有行进行CASE。因此,如果a.act = 'lember',则将tot_jam加到总和,否则将其减去。

© www.soinside.com 2019 - 2024. All rights reserved.