通过SQL合并表格难题
有2个表,表A记录如下:
序号 日期 金额 户名 帐号 备注
1 2012-3-3 130 张三 11111 发工资
2 2012-3-4 140 李四 22222 发奖金
3 2012-3-5 150 王五 33333 发补贴
4 2012-3-3 130 张三 11111 发工资
表B记录如下
序号1 日期1 金额1 户名1 帐号1 备注1
1 2012-3-3 130 张三 11111 再发工资
2 2012-3-3 130 张三 11111 再发工资
3 2012-3-5 150 黄六 66666 发补贴
如何通过SQL SERVER 命令,根据日期、金额和户名相等,两表核对生成以下结果
序号 日期 金额 户名 帐号 备注 序号1 日期1 金额1 户名1 帐号1 备注1
1 2012-3-3 130 张三 11111 发工资 1 2012-3-3 130 张三 11111 再发工资
2 2012-3-4 140 李四 22222 发奖金
3 2012-3-5 150 王五 33333 发补贴
4 2012-3-3 130 张三 11111 发工资 2 2012-3-3 130 张三 11111 再发工资
主要的问题是按核对字段(日期、金额和户名)表B有相同的记录,如何避免表B中第1笔记录再次与表A中第4笔记录匹配上.
通过以下SQL命令无法实现
select DISTINCT A.*,B.[户名1],B.[金额1],B.[户名1],B.[帐号1],B.[备注1]
from [A] LEFT JOIN [B] ON A.[日期]=B.[日期1] AND A.[金额]=B.[金额1] AND A.[户名]=B.[户名1]
结果是如下:请注意“序号1”,表B中的第2笔记录没有与表1中的第4笔记录核对上:
序号 日期 金额 户名 帐号 备注 序号1 户名1 金额1 户名1 帐号1 备注1
----------- ----------------------- ----------- ---- ----------- ------ ---- ----------- ---- ----------- --------
1 2012-03-03 130 张三 11111 发工资 1 张三 130 张三 11111 再发工资
2 2012-03-04 140 李四 22222 发奖金 NULL NULL NULL NULL NULL
3 2012-03-03 130 张三 11111 发工资 1 张三 130 张三 11111 再发工资
有高手提出
select 序号,日期,金额, 户名,帐号,备注,序号1,日期1,金额1, 户名1,帐号1,备注1
from (select rn=row_number() over (partition by 帐号 order by 日期,序号)from 表A) a,
left join (select rn=row_number() over (partition by 帐号1 order by 日期1,序号1)from 表B) b
on a.rn=b.rn and a.帐号=b.帐号
上述指令无法执行,请各位看客高手指教,谢谢!
------解决方案----------------------> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] ([序号] int,[日期] datetime,[金额] int,[户名] varchar(4),[帐号] int,[备注] varchar(6))
insert into [tb]
select&nb