两张表,同一行如何在其他值相同的情况下相减

linkreve 2017-08-31 04:12:59
例如
收款表A
money project bank
500 项目1 工行
600 项目2 建行
700 项目3 农行

付款表B
money project bank
200 项目1 工行
200 项目2 建行

目标:若project的值与bank的值都相同,则money的值相减
最终结果
余额表C
money project bank
300 项目1 工行
400 项目2 建行
700 项目3 农行
...全文
355 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
顺势而为1 2017-08-31
  • 打赏
  • 举报
回复


CREATE TABLE #Tmp_A(Money int,project nvarchar(20),bank nvarchar(20))

INSERT INTO #Tmp_A
Select 500,N'项目1',N'工行' union
Select 600,N'项目2',N'建行' union
Select 700,N'项目3',N'农行'

if not object_id(N'Tempdb..#Tmp_B') is null
drop table #Tmp_B
Go

CREATE TABLE #Tmp_B(Money int,project nvarchar(20),bank nvarchar(20))
GO

INSERT INTO #Tmp_B
Select 200,N'项目1',N'工行' union
Select 200,N'项目2',N'建行'

Select (a.Money-isnull(b.Money,0)) as Money,a.project,a.bank
From #Tmp_A a
Left Join #Tmp_B b on a.Project=b.Project And a.bank=b.bank



听雨停了 2017-08-31
  • 打赏
  • 举报
回复
按版主这样就可以,where条件里写上这两个相等就ok了
二月十六 2017-08-31
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([money] int,[project] nvarchar(23),[bank] nvarchar(22))
Insert #A
select 500,N'项目1',N'工行' union all
select 600,N'项目2',N'建行' union all
select 700,N'项目3',N'农行'
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([money] int,[project] nvarchar(23),[bank] nvarchar(22))
Insert #B
select 200,N'项目1',N'工行' union all
select 200,N'项目2',N'建行'
Go
--测试数据结束
SELECT #A.money - ISNULL(#b.money, 0) AS [money] ,
#A.project ,
#A.bank
FROM #A
LEFT JOIN #B ON #B.project = #A.project
AND #B.bank = #A.bank


linkreve 2017-08-31
  • 打赏
  • 举报
回复
请问怎么才能得到这个结果呢

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧