有A表(表示进的数量)
日期 单号 客户 进数
2007-7-1 A0001 a1 20
2007-7-1 A0002 a1 25
2007-7-3 A0003 a1 100
有B表(表示出的数量)
日期 单号 客户 出数
2007-7-1 B0001 a1 10
2007-7-1 B0002 a1 15
2007-7-3 B0003 a1 90 根据A,B两个表汇总的如下数据
日期 单号 客户 进数 出数 剩余
2007-7-1 A0001 a1 20 20
2007-7-1 A0002 a1 25 45
2007-7-1 B0001 a1 10 35
2007-7-1 B0002 a1 15 20
2007-7-3 A0003 a1 100 120
2007-7-3 B0003 a1 90 30
想了好多天都弄不出来,高手帮忙啊
日期 单号 客户 进数
2007-7-1 A0001 a1 20
2007-7-1 A0002 a1 25
2007-7-3 A0003 a1 100
有B表(表示出的数量)
日期 单号 客户 出数
2007-7-1 B0001 a1 10
2007-7-1 B0002 a1 15
2007-7-3 B0003 a1 90 根据A,B两个表汇总的如下数据
日期 单号 客户 进数 出数 剩余
2007-7-1 A0001 a1 20 20
2007-7-1 A0002 a1 25 45
2007-7-1 B0001 a1 10 35
2007-7-1 B0002 a1 15 20
2007-7-3 A0003 a1 100 120
2007-7-3 B0003 a1 90 30
想了好多天都弄不出来,高手帮忙啊
解决方案 »
- 怎样设置sql server 2005缓存
- [小结]自己整的表变量和临时表总结
- SqlServer版本从2000升级到2005后,*=语法不再支持,请教怎么办!
- 菜鸟问题:请问数据库的存储过程是指什么??
- 请问一般主/从式结构的数据库指的是哪些呢,谢谢
- 寒,和早上差不多的问题。。
- 给分补贴,题目为:服务器改名后,重装sql2000的问题
- SQL 2005的实例名可以改吗?如何改?
- 数据库置疑如何恢复???
- exec(‘declare @tablename table(cola int,colb int)’)为什么不可以????
- sql ID不规范查询
- 删除域环境以后, SQL2005不能正常登录!
(select sum(数量)
from (select 进数 as 数量 from A表 where 日期<=a.日期 and 单号<a.单号
union all
select -出数 as 数量 from B表 where 日期<=a.日期 and 单号<a.单号
) b
) as 剩余
from (select 日期,单号,客户,进数,0 as 出数 from A表
union all
select 日期,单号,客户,0 as 进数,出数 from B表
) a
order by 日期,单号
declare @A table([日期] Datetime,[单号] nvarchar(5),[客户] nvarchar(2),[进数] int)
Insert @A
select '2007-7-1',N'A0001',N'a1',20 union all
select '2007-7-1',N'A0002',N'a1',25 union all
select '2007-7-3',N'A0003',N'a1',100
--Select * from @A
declare @B table([日期] Datetime,[单号] nvarchar(5),[客户] nvarchar(2),[出数] int)
Insert @B
select '2007-7-1',N'B0001',N'a1',10 union all
select '2007-7-1',N'B0002',N'a1',15 union all
select '2007-7-3',N'B0003',N'a1',90
--Select * from @BSELECT T.*,
(SELECT SUM(A.[进数]) -SUM(A.[出数]) FROM (SELECT [日期],[单号],[客户],[进数], 0 AS [出数] FROM @A
UNION ALL
SELECT [日期],[单号],[客户],0 AS [进数], [出数] FROM @B ) A WHERE (A.[日期] < T.[日期]) OR( A.[日期] = T.[日期] AND A.[单号] <= T.[单号]) ) AS balance
FROM
(SELECT [日期],[单号],[客户],[进数], 0 AS [出数] FROM @A
UNION ALL
SELECT [日期],[单号],[客户],0 AS [进数], [出数] FROM @B
)T
ORDER BY [日期],[单号]
/*
日期 单号 客户 进数 出数 balance
----------------------- ----- ---- ----------- ----------- -----------
2007-07-01 00:00:00.000 A0001 a1 20 0 20
2007-07-01 00:00:00.000 A0002 a1 25 0 45
2007-07-01 00:00:00.000 B0001 a1 0 10 35
2007-07-01 00:00:00.000 B0002 a1 0 15 20
2007-07-03 00:00:00.000 A0003 a1 100 0 120
2007-07-03 00:00:00.000 B0003 a1 0 90 30
*/
declare @A table([日期] Datetime,[单号] nvarchar(5),[客户] nvarchar(2),[进数] int)
Insert @A
select '2007-7-1',N'A0001',N'a1',20 union all
select '2007-7-1',N'A0002',N'a1',25 union all
select '2007-7-3',N'A0003',N'a1',100
--Select * from @A
declare @B table([日期] Datetime,[单号] nvarchar(5),[客户] nvarchar(2),[出数] int)
Insert @B
select '2007-7-1',N'B0001',N'a1',10 union all
select '2007-7-1',N'B0002',N'a1',15 union all
select '2007-7-3',N'B0003',N'a1',90
--Select * from @BSELECT T.*,
(SELECT SUM(A.[进数]) -SUM(A.[出数]) FROM (SELECT [日期],[单号],[客户],[进数], 0 AS [出数] FROM @A
UNION ALL
SELECT [日期],[单号],[客户],0 AS [进数], [出数] FROM @B ) A WHERE (A.[日期] < T.[日期]) OR( A.[日期] = T.[日期] AND A.[单号] <= T.[单号]) ) AS balance
FROM
(SELECT [日期],[单号],[客户],[进数], 0 AS [出数] FROM @A
UNION ALL
SELECT [日期],[单号],[客户],0 AS [进数], [出数] FROM @B
)T
ORDER BY [日期],[单号]
/*
日期 单号 客户 进数 出数 balance
----------------------- ----- ---- ----------- ----------- -----------
2007-07-01 00:00:00.000 A0001 a1 20 0 20
2007-07-01 00:00:00.000 A0002 a1 25 0 45
2007-07-01 00:00:00.000 B0001 a1 0 10 35
2007-07-01 00:00:00.000 B0002 a1 0 15 20
2007-07-03 00:00:00.000 A0003 a1 100 0 120
2007-07-03 00:00:00.000 B0003 a1 0 90 30
*/呵呵 和尚你太早了吧周末也在 都没日没夜的 帮人家 真热心啊