34,590
社区成员
发帖
与我相关
我的任务
分享
SELECT fAcc.id, fAcc.bankAccId, fAcc.closeDate,
fAcc.closeBalance, fAcc.isActive,
fTake.value as financeValue,
(fAcc.closeBalance + fTake.value) as balance
FROM dbo.finance_account AS fAcc INNER JOIN
(
SELECT financeAccId, SUM(value) as value
FROM dbo.finance_taking as t inner join finance_account t1 on t.financeAccId=t1.Id
WHERE t.date > t1.closeDate -- 这句就OK 或者使用cte的方式
GROUP BY financeAccId
) AS fTake ON fTake.financeAccId = fAcc.Id
[/quote]
)。
同时 14 楼的 rockyljt提供的信息和 17楼 Beirut 提供的方案也能解决问题,尤其是Beirut 说的apply 方式:
简洁清晰,应该说正是我所找的,但是因为对SQL 以及 SQL server不是很熟悉,以前我从没用过这个apply,所以之前压根没有想到过apply,去查了一下,很方便的语法。
17楼,你的方案也能简化写法,丹我觉得用其他方法更加正常,同样谢谢
最后谢谢本帖所有的参与者。
至于join方案 和 aplly 方案的效率,我不是老手,无法做出比较好的对比,看以后的经验吧SELECT fAcc.id, fAcc.bankAccId, fAcc.closeDate,
fAcc.closeBalance, fAcc.isActive,
fTake.value as financeValue,
(fAcc.closeBalance + fTake.value) as balance
FROM dbo.finance_account AS fAcc INNER JOIN
(
SELECT financeAccId, SUM(value) as value
FROM dbo.finance_taking as t inner join finance_account t1 on t.financeAccId=t1.Id
WHERE t.date > fAcc.closeDate -- 这句就OK 或者使用cte的方式
GROUP BY financeAccId
) AS fTake ON fTake.financeAccId = fAcc.Id
declare @val varchar(max)
declare @sql varchar(max)
set @val='facc.id,facc.bankaccid,facc.closedate,
facc.closebalance,facc.isactive'
set @sql='select '+@val+',sum(ftake.[value]) as financevalue,(
facc.closebalance+sum(ftake.[value])) as balance from dbo.finance_account as
facc inner join dbo.finance_taking as ftake on ftake.financeaccid=
facc.id and ftake.[date]>facc.closedate group by '+@val
exec(@sql)
declare @val varchar(max)
declare @sql varchar(max)
set @val='facc.id,facc.bankaccid,facc.closedate,
facc.closebalance,facc.isactive'
set @sql='select '+@sql+',sum(ftake.[value]) as financevalue,(
facc.closebalance+sum(ftake.[value])) as balance from dbo.finance_account as
facc inner join dbo.finance_taking as ftake on ftake.financeaccid=
facc.id and ftake.[date]>facc.closedate group by '+@sql
exec (@sql)
不知道这样是不是楼主想要的。SELECT
id
,bankAccId
,closeDate
,closeBalance
,isActive
,viewLevel
,SUM([value]) as financeValue
,(closeBalance + SUM([value])) as balance
FROM (
select fAcc.id id
,fAcc.bankAccId bankAccId
,fAcc.closeDate closeDate
,fAcc.closeBalance closeBalance
,fAcc.isActive isActive
,fAcc.viewLevel viewLevel
,fTake.[value] [value]
from dbo.finance_account AS fAcc
INNER JOIN dbo.finance_taking AS fTake
ON fTake.financeAccId = fAcc.Id AND fTake.[date] > fAcc.closeDate
) t
GROUP BY
id
,bankAccId
,closeDate
,closeBalance
,isActive
,viewLevel
SELECT
id
,bankAccId
,closeDate
,closeBalance
,isActive
,viewLevel
,SUM([value]) as financeValue
,(fAcc.closeBalance + SUM(fTake.[value])) as balance
FROM (
select fAcc.id id
,fAcc.bankAccId bankAccId
,fAcc.closeDate closeDate
,fAcc.closeBalance closeBalance
,fAcc.isActive isActive
,fAcc.viewLevel viewLevel
,fTake.[value] [value]
from dbo.finance_account AS fAcc
INNER JOIN dbo.finance_taking AS fTake
ON fTake.financeAccId = fAcc.Id AND fTake.[date] > fAcc.closeDate
) t
GROUP BY
id
,bankAccId
,closeDate
,closeBalance
,isActive
,viewLevel