Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于多个条件和联接将一对多求和_Mysql_Sql_Select_Sum - Fatal编程技术网

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…它应该与
分组依据
一起使用。