运行此查询:
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
列。我很好地接受任何匹配的RPID
(ledger
中的RPID
和patient
表中的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
答案 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
更改为JOIN
:http://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