日期:2014-05-17  浏览次数:20457 次

应收款报表,最好能写个存储过程,谢谢

CREATE TABLE [dbo].出货列表(
客户名称 [nvarchar](max) NOT NULL,
出货单号 [nvarchar](max) NOT NULL,
    出货日期 [datetime] not null,
存货编码 [nvarchar](max) NOT NULL,
数量 [nvarchar](max) NULL,
    价格 [nvarchar](max) NOT NULL,
    金额 [nvarchar](max) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].收款列表(
客户名称 [nvarchar](max) NOT NULL,
收款单号 [nvarchar](max) NOT NULL,
收款日期 [datetime] NOT NULL,
    金额 [nvarchar](max) NOT NULL
) ON [PRIMARY]


insert into 出货列表(客户名称,出货单号,出货日期,存货编码,数量,价格,金额)select '客户一','IV12060001','2012-06-30','701001','2','120','240'
insert into 出货列表(客户名称,出货单号,出货日期,存货编码,数量,价格,金额)select '客户一','IV12060002','2012-06-30','701002','3','100','300'
insert into 出货列表(客户名称,出货单号,出货日期,存货编码,数量,价格,金额)select '客户二','IV12070001','2012-07-30','701003','2','120','240'
insert into 出货列表(客户名称,出货单号,出货日期,存货编码,数量,价格,金额)select '客户一','IV12070001','2012-07-30','701001','2','120','240'
insert into 出货列表(客户名称,出货单号,出货日期,存货编码,数量,价格,金额)select '客户二','IV12090001','2012-09-30','701004','2','200','400'
insert into 出货列表(客户名称,出货单号,出货日期,存货编码,数量,价格,金额)select '客户一','IV12090001','2012-09-30','701005','1','300','300'

insert into 收款列表(客户名称,收款单号,收款日期,金额)select '客户一','RCV12060001','2012-06-30','1100'
insert into 收款列表(客户名称,收款单号,收款日期,金额)select '客户二','RCV12080001','2012-08-30','300'
insert into 收款列表(客户名称,收款单号,收款日期,金额)select '客户一','RCV12090001','2012-09-30','500'

--select * from 出货列表
--select * from 收款列表
--要的结果
客户名称 类型 前期余额 2012年7月 2012年8月 2012年9月  
客户一  发货  540      240      0           300
客户一  收款  1100    0         0           500
客户二  发货  0       240       0           400
客户二  收款  0       0         300         0

最好做一个存储过程
7月以前都属于前期,













------解决方案--------------------

SET NOCOUNT ON

DECLARE @dtMonthStart DATETIME
DECLARE @dtMonthEnd DATETIME
SET @dtMonthStart = '2012-07-01'
SET @dtMonthEnd   = '2012-11-30'

DECLARE @tb_month TABLE 
(
ID INT IDENTITY(1,1) NOT NULL,
strMonth CHAR(7)
)

WHILE 1 = 1
 BEGIN
IF(DATEDIFF(MONTH,@dtMonthStart,@dtMonthEnd) < 0)
BREAK
INSERT INTO @tb_month SELECT LEFT(CONVERT(VARCHAR(20),@dtMonthStart,120),7)
SET @dtMonthStart = DATEADD(MONTH,1,@dtMonthStart)
 END

DECLARE @strSQL NVARCHAR(4000)
SET @strSQL = N'SELECT 
客户名称,
类型, '

DECLARE @i INT = 1