应收款报表,最好能写个存储过程,谢谢
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