根据多个条件和联接对一对多求和

我不确定如何表达我的问题。但是我有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

现在我的小时数列正确输入了,但是,Est列返回了奇怪的数据,例如数字成千上万了。难道不是以某种方式被绑在第一栏吗?我基本上想在一行上获得具有相同a.value的所有Id的总和。我现在的工作是显示所有Id,并且仅有多个值,并且将其单独细分。但是,我希望它浓缩。任何援助将不胜感激。如果我的代码中存在较小的拼写错误(这不是实际的代码,则只是将代码重命名为隐私原因,我需要逻辑上的帮助)。请,谢谢。

xuyin19881101 回答:根据多个条件和联接对一对多求和

多么令人困惑的数据模型!您可以使用子查询来获得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;
本文链接:https://www.f2er.com/3136915.html

大家都在问