在数据库中有两个表,一个是收款金额表,是向客户收款的;一个是付款金额表,是向有关单位付款的;
收款金额表字段如下:
费用名称 金额 付款单位 内部编号
运输费 50.00 a ZJH0001
吊装费 100.00 b ZJH0001
海港费 90.00 c ZJH0001
......付款金额表字段如下:
费用名称 金额 收款单位
运输费 50.00 A ZJH0001
CFS费 79.00 B ZJH0001
THC费 200.00 C ZJH0001要求查询出如下格式的表应收款项 收款金额 付款人 应付款项 付款金额 收款人
运输费 50.00 a 运送费 50.00 A
吊装费 100.00 b 吊装费 0.00
海港费 90.00 c 海港费 0.00
CFS费 CFS费 79.00 B
THC费 THC费 200.00 C要求查询内部编号所对应的付款和收款项目,在两个表中有相同费用的全部列出费用信息
要求各个费用名称在同一行中显示在线等,谢谢!!!
收款金额表字段如下:
费用名称 金额 付款单位 内部编号
运输费 50.00 a ZJH0001
吊装费 100.00 b ZJH0001
海港费 90.00 c ZJH0001
......付款金额表字段如下:
费用名称 金额 收款单位
运输费 50.00 A ZJH0001
CFS费 79.00 B ZJH0001
THC费 200.00 C ZJH0001要求查询出如下格式的表应收款项 收款金额 付款人 应付款项 付款金额 收款人
运输费 50.00 a 运送费 50.00 A
吊装费 100.00 b 吊装费 0.00
海港费 90.00 c 海港费 0.00
CFS费 CFS费 79.00 B
THC费 THC费 200.00 C要求查询内部编号所对应的付款和收款项目,在两个表中有相同费用的全部列出费用信息
要求各个费用名称在同一行中显示在线等,谢谢!!!
解决方案 »
- 关于合成图片之后内存释放问题,在线等
- DataGridView 如何设置 上标字符?
- 做一个能够以文件夹为单位提取txt内容的winform,求助!
- 请教一个正则表达式
- c#使用socket编写的smtp,有几个地方没看懂
- 如何关闭父进程启动的子进程.....?
- 数据量比较大时的查询问题,C#的!在线等,100分!
- 怎样将Checkboxlist中被选中的值放入text中?有段代码帮助分析一下
- 如果用C# winform做服务端,用android做客户端,怎样连接最好?
- 关于DropDownList的问题!
- 大家好,在水晶报表中怎么自定义页面宽度?
- FormView如何在编辑时,如何设置一个dropDownlist的值不是数据库的初始值
select a.费用名称 as '应收款项',a.金额 as '收款金额',a.付款单位 as '付款人',b.费用名称 as 应付款项,b.金额 as '付款金额',b.收款单位 as '收款人' from 收款金额表 as a,付款金额表 as b where (a.xxx=b.xxxx)关键你给的信息不足,不知道你到底两个表是靠什么联系起来的,所以筛选的条件得靠你自己写了
关键是A B的id要等值,而且都不重复:)
不然就用 Left out join咯,那边多就做被附加表。
B.[费用名称] [应付款项],B.[金额] [付款金额],B.[收款单位] [收款人] FROM
[收款金额表] A INNER JOIN [付款金额表] B ON A.[内部编号] = B.[内部编号] AND A.[应收款项] = B.[应收款项]
B.[费用名称] [应付款项],B.[金额] [付款金额],B.[收款单位] [收款人] FROM
[收款金额表] A CROSS JOIN [付款金额表] B ON A.[内部编号] = B.[内部编号] AND A.[应收款项] = B.[应收款项]
a.费用名称 as 应收款项,a.金额 as 收款金额,a.付款单位 as 付款人,
b.费用名称 as 应付款项,b.金额 as 付款金额,b.收款单位 as 收款人
from 收款金额表 a
left join 付款金额表 b
on a.内部编号 = b.内部编号 and a.费用名称 = b.费用名称
create table 收款金额表(费用名称 NVARCHAR(20),金额 DECIMAL(18,2),付款单位 NVARCHAR(100),内部编号 VARCHAR(20),PRIMARY KEY(内部编号,费用名称))
GOCREATE TABLE 付款金额表(费用名称 NVARCHAR(20),金额 DECIMAL(18,2),收款单位 NVARCHAR(100),内部编号 VARCHAR(20),PRIMARY KEY(内部编号,费用名称))
GO--插入测试数据
INSERT INTO 收款金额表
SELECT N'运输费' , 50.00 , N'a' , 'ZJH0001'
UNION ALL
SELECT N'吊装费' , 100.00, N'b' , 'ZJH0001'
UNION ALL
SELECT N'海港费' ,90.00, N'c' , 'ZJH0001'INSERT INTO 付款金额表
SELECT N'运输费' , 50.00 , N'A' ,'ZJH0001'
UNION ALL
SELECT N'CFS费' , 79.00 , N'B' ,'ZJH0001'
UNION ALL
SELECT N'THC费' , 200.00 , N'C' ,'ZJH0001'
--sql 语句
--费用名称相同部分
select s.费用名称 as 应收款项,s.金额 as 收款金额,s.付款单位 as 付款人,f.费用名称 as 应付款项,f.金额 as 付款金额,f.收款单位 as 收款人
from 收款金额表 s inner join 付款金额表 f on s.内部编号=f.内部编号 and s.费用名称=f.费用名称
where s.内部编号='ZJH0001'
union all
--收款部分
select s.费用名称,s.金额,s.付款单位,s.费用名称,0,''
from 收款金额表 s where s.内部编号='ZJH0001' and s.费用名称 not in(select 费用名称 from 付款金额表 where 内部编号='ZJH0001')
union all
--付款部分
select f.费用名称,0,'',f.费用名称,f.金额,f.收款单位
from 付款金额表 f where f.内部编号='ZJH0001' and f.费用名称 not in(select 费用名称 from 收款金额表 where 内部编号='ZJH0001')
--sql语句执行结果:
/*--------------------------------------------------------
应收款项 收款金额 付款人 应付款项 付款金额 收款人
运输费 50.00 a 运输费 50.00 A
吊装费 100.00 b 吊装费 0.00
海港费 90.00 c 海港费 0.00
CFS费 0.00 CFS费 79.00 B
THC费 0.00 THC费 200.00 C
--------------------------------------------------------*/--清除测试环境
drop table 收款金额表
drop table 付款金额表
go
create view INOUTVIEW
as
select
a.费用名称 as 应收款项,a.金额 as 收款金额,a.付款单位 as 付款人,
b.费用名称 as 应付款项,b.金额 as 付款金额,b.收款单位 as 收款人
from 收款金额表 a FULL OUTER JOIN 付款金额表 b
on a.内部编号 = b.内部编号 and a.费用名称 = b.费用名称
Select B.费用名称 as 应收款项,B.金额 as 收款金额,A.付款单位 as 付款人,
A.费用名称 as 应付款项,A.金额 as 付款金额,费用名称,B.收款单位 as 收款人
From A Full Outer Join B On A.费用名称=B.费用名称
测试通过