Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
带groupby的SQL连接查询_Sql - Fatal编程技术网

带groupby的SQL连接查询

带groupby的SQL连接查询,sql,Sql,我有两个表,T1和T2,其中一个(T1)存储要支付的金额(AP)、主键Id和个人Id(pid) 其他表(T2)存储已支付的金额(Pay),这可以是多个,因为可以为AP进行多次支付,还存储T1 ID和类型的外键 现在我想要的是t1中的SUM(AP)和SUM(Pay)groupby类型 我对它的查询(不是确切的查询,但很好地解释了我在尝试什么) 解释 T1 T2 ID AP ID Pay Type 19 X 19

我有两个表,T1和T2,其中一个(T1)存储要支付的金额(AP)、主键Id和个人Id(pid)

其他表(T2)存储已支付的金额(Pay),这可以是多个,因为可以为AP进行多次支付,还存储T1 ID和类型的外键

现在我想要的是t1中的SUM(AP)和SUM(Pay)groupby类型

我对它的查询(不是确切的查询,但很好地解释了我在尝试什么)

解释

T1                T2

ID   AP            ID Pay Type

19   X             19 W  A
20   Y             19 Q  B
21   Z             21 R  B
                   21 S  B
现在发生了什么,当它按类型分组时,它把19,21,21作为B,加在一起,它给我T1的和是Z+X的两倍,同样对于A,它把A和返回的和作为X

我接收格式的数据

1. AP:X, Pay:W, Type: A
2. AP: X+Z+Z, Pay:Q+R+S,Type B
我需要的是T1的和和T2的和(基于T1的id)按类型分组

我用两个不同的查询解决了这个问题,每个查询一个,但无法在单个查询中完成,这可能很复杂,我知道,但如果可能的话,我希望这样做


希望我能把问题说清楚。

这就是你们想要的吗

select 
    vt1.id,
    vt1.ap,
    sum(t2.pay),
    t2.type

from (select id, sum(ap) as ap from t1 group by id) vt1
    left join t2 on vt1.id=t2.id
group by vt1.id, vt1.ap, t2.type

如果按类型分组,您将不可避免地得到ID=19 AP=x重复金额。一个解决方案可能是在不同的类型中划分x(百分比?第一种类型得到整个数量?)T1,否。Id是它的主键。我对您想要的结果有点困惑。请您也添加一个您想要的输出示例?@Dems我想要T1中的数据总和和T2中的数据总和按类型分组,在单个查询中,您不能,因为您有两种类型用于单个T1。因此,T1中的一行将被列出两次(如果有更多类型,则列出更多次)。如果您的报告不尝试求和(AP),则这不是问题。如果是这样的话,你将不得不想出一种方法,将AP的价值分成不同的类型。您可能会在第一行中显示值,并在下一行中使用相同的T1.ID将其设为空,或者您可能会根据t2中的值排列值,在这种情况下,您可能会遇到数字舍入问题。这是它在上述查询中返回的结果:(格式化问题,添加了行号)row
ID ap sum(t2.pay)键入1.19 0 0 A 2.19 0 0 B 3.20 0 NULL 4.21 0 0 B
它不是按分组,对吗?这里我有3个B项
select 
    vt1.id,
    vt1.ap,
    sum(t2.pay),
    t2.type

from (select id, sum(ap) as ap from t1 group by id) vt1
    left join t2 on vt1.id=t2.id
group by vt1.id, vt1.ap, t2.type