用作表达式postgresql的子查询返回的多行

时间:2013-05-29 09:07:57

标签: sql postgresql select sum subquery

postgresql,我有一个表my_table 4表,其中包含列stxstxid,stxuserid sumamountstx,userid,amountcredit,amountrc 我的目标是将具有相同stxstxid的不同行合并为一行,同时将这些选定行的sales列合并到合并行中。

例如

stx                              stxitem    
stxid   stxuserid                stxid  amountstx
-------------------            -----------------------
001           A                 001            20
002           B                 002            12
002           B                 002            200
003           C                 003            360
003           C                 003            400
004           D                 004            300
004           D                 004            450
004           D                 004            100
005           E                 005            800
005           E                 005            950
005           E                 005            800
005           E                 005            600

srcitem         
srcid   userid  soueceid  amountsrc 
------------------------------------
A0001   src001    001       20
A0002   src002    002       212
A0003   src003    003       500
A0004   src004    004       800


credit      
creditID     stxid     amountcredit
---------------------------------------
9X0001        001         0
9X0002        002         0
9X0003        003        60
9X0004        004        50
9X0005        005        3150

这就是我应该得到的

结果

stxid   stxuserid   sumamountstx    userid  amountcredit    amountsrc
---------------------------------------------------------------------------
003           C           760        src003     60              500
005           E           3150                  3150

我做了一些研究,我发现自我加入应该做类似于我应该得到的东西。

1 个答案:

答案 0 :(得分:1)

select
 a.stxid,
 a.stxuserid,
 x.sumamountstx,
 s.userid,
 s.amountsrc
from
 (select stxid, stxuserid from stx group by stxid, stxuserid) a
 join (select stxid, sum(amountstx) sumamountstx from stxitem group by stxid) x using (stxid)
 join credit using (stxid)
 left join srcitem s on (a.stxid = s.souceid)

不确定这是否正确。给我们sqlfiddle的样本数据,我们可以测试。