我有4个列名相似的表:
Table 1 : simp_wajib
id anggota nilai
1 nama1 100
2 nama2 100
3 nama1 100
Table 2 : simp_pokok
id anggota nilai
1 nama2 100
2 nama3 100
3 nama1 100
Table 3 : simp_sukarela
id anggota nilai
1 nama2 100
2 nama2 100
3 nama1 100
Table 4 : simp_berjangka
id anggota nilai
1 nama3 100
2 nama2 100
3 nama3 100
我尝试使用以下查询加入这四个表,但它给了我不正确的总和值
SELECT nama.anggota, sum(simp_wajib.nilai) as wajib, sum(simp_pokok.nilai) as pokok,sum(simp_sukarela.nilai) as sukarela,sum(simp_berjangka.nilai) as berjangka
FROM
(SELECT anggota from simp_pokok
UNION
SELECT anggota FROM simp_wajib) nama
LEFT JOIN simp_pokok ON simp_pokok.anggota=nama.anggota
LEFT JOIN simp_wajib ON simp_wajib.anggota=nama.anggota
LEFT JOIN simp_sukarela ON simp_sukarela.anggota=nama.anggota
LEFT JOIN simp_berjangka ON simp_berjangka.anggota=nama.anggota
group by nama.anggota
任何帮助将不胜感激
答案 0 :(得分:0)
如果您加入表格,最终会得到比预期更多的行,因为联接将跨越表格之间的值。 您可能需要的是,所有表之间的联合,总结常见值,首先按公共列分组,然后从您将添加的自定义字段中跟踪原始表。
最后,您将使用CASE语句转置结果。
coalesce(sum(CASE ...), 0) as `simp_pokok`
如果您不喜欢“null”值,可以使用coalesce函数包装sum(),例如
parentRec
答案 1 :(得分:0)
使用您的查询,结果如下
anggota nilai origin
1 200 simp_berjangka
1 200 simp_pokok
1 100 simp_sukarela
1 400 simp_wajib
2 300 simp_sukarela
2 500 simp_wajib
3 100 simp_pokok
3 200 simp_sukarela
4 200 simp_berjangka

我的预期输出是每个由anggota分组的总和值
anggota sum(simp_pokok) sum(simp_wajib) sum(simp_berjangka) sum(simp_sukarela)
1 200 400 200 200
2 0 500 0 300
3 100 0 0 200
4 0 0 200 0