我不知道如何表达我的问题。但我有 2 个不同的表需要连接在一起才能给出结果。
Table A
--------------------------
Id | Field_Id | Value
--------------------------
1234| 16 | PO456
1234| 7 | 40
1334| 16 | PO456
1334| 7 | 20
1246| 16 | PO679
1246| 7 | 100
1247| 16 | PO679
1247| 7 | 20
1247| 16 | PO679
1247| 7 | 40
Table B
--------------
Id | Hours |
--------------
1234| 2
1234| 3
1234| 4
1234| 5
1334| 8
1334| 8
1334| 8
1246| 3
1246| 3
1247| 8
1247| 8
现在我想要的结果应该是这样的。
Result
-----------------------
Value | Est | Hours
-----------------------
PO456 | 60 | 38
PO679 | 160| 22
这是我的sql:
select a.value as "Id", CAST(sum(d.value) AS Decimal(10,2)) as 'Est'
, COALESCE(sum(b.Hours),0) as "Hours"
from table_a a
left Join table_b b ON a.Id = b.Id
inner join table_a d ON d.Id = a.Id AND d.Field_Id = '7'
where a.Field_Id = '16' and a.value <> ' '
Group By a.value
ORDER BY a.value ASC
现在我的工作时间列正确输入,但是东部列返回了奇怪的数据,比如数字少了数千。它是不是以某种方式被绑回第一列?我基本上想在一行上获得具有相同 a.value 的所有 Id 的总和。我现在的工作是它显示所有 Id,并且只有多个值,并且它被单独分解。但是,我希望它浓缩。任何援助将不胜感激。如果我的代码中有轻微的拼写错误(这不是实际的代码,该代码只是出于隐私原因重命名,我需要逻辑上的帮助)。请并谢谢您。
最佳答案
多么令人困惑的数据模型!您可以使用子查询来获取 est
值:
select a16.value, a7.value,
sum(b.hours)
from table_a a16 left join
(select a16.value,
sum(a7.value) as est -- should convert to a number for sum()
from table_a a16 join
table_a a7
on a16.id = a7.id and a7.field_id = 7 and
a16.field_id = 16
group by 16.value
) a7
on a16.value = a7.value
table_b b
on a16.Id = b.Id
where a16.field_id = 16
group by a16.value, a7.est;
关于mysql - 基于多个条件和 JOINS 进行一对多求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58769311/