查询组总和与交叉申请

时间:2015-04-28 19:42:34

标签: sql-server group-by

运行此查询:

select rpid, SUM(AMOUNT) AS AMOUNT, MIN(p.oid) as HomeID from LEDGER
cross apply 
(select top 1 p.oid
from dbo.patient as p
where p.rpid = ledger.rpid
order by p.oid) AS p
group by RPID
order by rpid

我将这两个不同的查询拼凑在一起,这些查询单独工作但是当合并时没有返回任何结果。

我想从PATID表中对SUM(AMOUNT)ledger进行分组,但是将OID表中的patient添加到与RPID表相匹配的结果中OID列。我很好地接受任何匹配的RPIDledger中的RPIDpatient表中的RPID之间)patient仅在LEDGER TABLE RPID AMOUNT 100 25 100 30 100 30 110 50 110 50 PATIENT TABLE RPID OID 100 10 110 20 RESULT RPID AMOUNT OID 100 85 10 110 100 20 中存在一次{ {1}}表 - 这就是我使用MIN函数的原因,但它可以是任何东西。

实施例

inputDataSource

2 个答案:

答案 0 :(得分:0)

如果您想要的结果是:

RPID    AMOUNT    OID
100     85        10
110     100       20 

然后表之间的简单连接和金额之和就可以得到:

select 
    l.rpid, 
    sum(l.amount) as amount, 
    p.oid as HomeID 
from ledger as l
join dbo.patient as p on p.rpid = l.rpid
group by l.RPID, p.OID

根本不需要申请。

答案 1 :(得分:0)

您可以将CROSS APPLY更改为JOINhttp://sqlfiddle.com/#!6/5273c/4

select l.rpid, sum(l.amount) as amount, min(p.oid) as HomeID 
from ledger l
join patient p on l.rpid = p.rpid
group by l.rpid
order by l.rpid 

CROSS APPLY的版本也有效:http://sqlfiddle.com/#!6/5273c/1