Mysql 基于多个条件和联接将一对多求和
我不知道该如何回答我的问题。但我有两个不同的表,它们需要连接在一起才能给出结果Mysql 基于多个条件和联接将一对多求和,mysql,sql,select,sum,Mysql,Sql,Select,Sum,我不知道该如何回答我的问题。但我有两个不同的表,它们需要连接在一起才能给出结果 Table A -------------------------- Id | Field_Id | Value -------------------------- 1234| 16 | PO456 1234| 7 | 40 1334| 16 | PO456 1334| 7 | 20 1246| 16 | PO679
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”,将(和(d.value)作为十进制(10,2))转换为“Est”
,合并(总和(b.Hours),0)为“小时”
从表a
a.Id=b.Id上的左联接表
d.Id=a.Id和d.Field上的内部联接表
其中a.Field_Id='16'和a.value''
按a值分组
按a.value ASC排序
现在我的“小时”列输入正确,但是它是返回奇怪数据的Est列,比如数字相差数千。它是不是以某种方式与第一列联系在一起了?我基本上想得到所有Id的总和,在一行上有相同的a.值。我现在的工作是它显示所有的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;
列值不能为sum()-ed,因为它不是数字列。查询无效,应该会引发错误。您使用的是哪种dbms?@jarlh这就是我将其转换为十进制的原因。查询有效,只是返回的值无效。您可以强制转换总和,而不是值。Do总和(转换为十进制(10,2)的d值)相反,@jarlh这并没有给出不同的结果。数字仍然不准确。我输入了这个,但现在Est列的所有值都为空。很抱歉,我将group by取出,它只返回了一条记录,这也是我不想要的。我想要所有不同的记录。但我没有收到语法错误。只是在我的t、 @dcary…它应该与
分组依据
一起使用。