--建立表结构
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tCustomer]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tCustomer]
GOCREATE TABLE [dbo].[tCustomer] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ContractNumber] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,--合同号主键
[CustomerName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerSex] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerDate] [datetime] NULL ,
[CustomerDesc] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tCustomerLoan]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tCustomerLoan]
GOCREATE TABLE [dbo].[tCustomerLoan] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ContractNumber] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerID] [int] NULL ,
[Customerloan] [decimal](18, 3) NULL ,
[LoanDate] [datetime] NULL ,
[LoanDesc] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tCustomerReturn]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tCustomerReturn]
GOCREATE TABLE [dbo].[tCustomerReturn] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ContractNumber] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerID] [int] NULL ,
[CustomerReturn] [decimal](18, 3) NULL ,
[ReturnDate] [datetime] NULL ,
[ReturnDesc] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--插入测试数据insert tCustomer select '10001','张三','男','2006-01-01',null
insert tCustomer select '10002','李四','男','2006-01-01',null
insert tCustomerLoan select '10001',1,18152.43,'2006-1-27',null
insert tCustomerLoan select '10001',1,18152.43,'2006-2-27',null
insert tCustomerLoan select '10001',1,18152.43,'2006-3-27',null
insert tCustomerLoan select '10001',1,18152.43,'2006-4-27',null
insert tCustomerLoan select '10001',1,18152.43,'2006-5-27',nullinsert tCustomerReturn select '10001',1,8152.43,'2006-1-2',null
insert tCustomerReturn select '10001',1,8152.43,'2006-1-31',null
insert tCustomerReturn select '10001',1,8152.43,'2006-2-27',null
--我现在只能得到如下形式:
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-01-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-02-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-03-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-04-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-05-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 NULL NULL 8152.430 2006-01-02 00:00:00.000
10001 张三 男 2006-01-01 00:00:00.000 NULL NULL 8152.430 2006-01-31 00:00:00.000
10001 张三 男 2006-01-01 00:00:00.000 NULL NULL 8152.430 2006-02-27 00:00:00.000
10002 李四 男 2006-01-01 00:00:00.000 NULL NULL NULL NULL
10002 李四 男 2006-01-01 00:00:00.000 NULL NULL NULL NULL
--想得到如下显示结果:'10001','张三','男','2006-01-01',NULL, Null, 8152.43,'2006-1-2'
'10001','张三','男','2006-01-01',18152.43,'2006-1-27',
'10001','张三','男','2006-01-01',NULL, Null, 8152.43,'2006-1-31
'10001','张三','男','2006-01-01',18152.43,'2006-2-27', 8152.43,'2006-2-27'
'10001','张三','男','2006-01-01',18152.43,'2006-3-27', null, Null
'10001','张三','男','2006-01-01',18152.43,'2006-4-27', null, Null
'10001','张三','男','2006-01-01',18152.43,'2006-5-27', null, Null
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tCustomer]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tCustomer]
GOCREATE TABLE [dbo].[tCustomer] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ContractNumber] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,--合同号主键
[CustomerName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerSex] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerDate] [datetime] NULL ,
[CustomerDesc] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tCustomerLoan]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tCustomerLoan]
GOCREATE TABLE [dbo].[tCustomerLoan] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ContractNumber] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerID] [int] NULL ,
[Customerloan] [decimal](18, 3) NULL ,
[LoanDate] [datetime] NULL ,
[LoanDesc] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tCustomerReturn]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tCustomerReturn]
GOCREATE TABLE [dbo].[tCustomerReturn] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ContractNumber] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerID] [int] NULL ,
[CustomerReturn] [decimal](18, 3) NULL ,
[ReturnDate] [datetime] NULL ,
[ReturnDesc] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--插入测试数据insert tCustomer select '10001','张三','男','2006-01-01',null
insert tCustomer select '10002','李四','男','2006-01-01',null
insert tCustomerLoan select '10001',1,18152.43,'2006-1-27',null
insert tCustomerLoan select '10001',1,18152.43,'2006-2-27',null
insert tCustomerLoan select '10001',1,18152.43,'2006-3-27',null
insert tCustomerLoan select '10001',1,18152.43,'2006-4-27',null
insert tCustomerLoan select '10001',1,18152.43,'2006-5-27',nullinsert tCustomerReturn select '10001',1,8152.43,'2006-1-2',null
insert tCustomerReturn select '10001',1,8152.43,'2006-1-31',null
insert tCustomerReturn select '10001',1,8152.43,'2006-2-27',null
--我现在只能得到如下形式:
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-01-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-02-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-03-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-04-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 18152.430 2006-05-27 00:00:00.000 NULL NULL
10001 张三 男 2006-01-01 00:00:00.000 NULL NULL 8152.430 2006-01-02 00:00:00.000
10001 张三 男 2006-01-01 00:00:00.000 NULL NULL 8152.430 2006-01-31 00:00:00.000
10001 张三 男 2006-01-01 00:00:00.000 NULL NULL 8152.430 2006-02-27 00:00:00.000
10002 李四 男 2006-01-01 00:00:00.000 NULL NULL NULL NULL
10002 李四 男 2006-01-01 00:00:00.000 NULL NULL NULL NULL
--想得到如下显示结果:'10001','张三','男','2006-01-01',NULL, Null, 8152.43,'2006-1-2'
'10001','张三','男','2006-01-01',18152.43,'2006-1-27',
'10001','张三','男','2006-01-01',NULL, Null, 8152.43,'2006-1-31
'10001','张三','男','2006-01-01',18152.43,'2006-2-27', 8152.43,'2006-2-27'
'10001','张三','男','2006-01-01',18152.43,'2006-3-27', null, Null
'10001','张三','男','2006-01-01',18152.43,'2006-4-27', null, Null
'10001','张三','男','2006-01-01',18152.43,'2006-5-27', null, Null
select a.ContractNumber, a.CustomerName, a.CustomerSex,
b.Customerloan, b.LoanDate,
CustomerReturn = cast(null as decimal(18,3)), ReturnDate=cast(null as datetime)
from tCustomer a
inner join tCustomerLoan b
on a.ContractNumber = b.ContractNumber
union all
select a.ContractNumber, a.CustomerName, a.CustomerSex,
CustomerReturn = cast(null as decimal(18,3)), ReturnDate=cast(null as datetime),
c.CustomerReturn, c.ReturnDate
from tCustomer a
inner join tCustomerReturn c
on a.ContractNumber = c.ContractNumber
)a
order by ContractNumber, isnull(LoanDate, ReturnDate)
into #
from(
select a.ContractNumber, a.CustomerName, a.CustomerSex,
b.Customerloan, b.LoanDate,
CustomerReturn = cast(null as decimal(18,3)), ReturnDate=cast(null as datetime)
from tCustomer a
inner join tCustomerLoan b
on a.ContractNumber = b.ContractNumber
union all
select a.ContractNumber, a.CustomerName, a.CustomerSex,
CustomerReturn = cast(null as decimal(18,3)), ReturnDate=cast(null as datetime),
c.CustomerReturn, c.ReturnDate
from tCustomer a
inner join tCustomerReturn c
on a.ContractNumber = c.ContractNumber
)a
order by ContractNumber, isnull(LoanDate, ReturnDate)select *, balance=(select sum(isnull(LoanDate,0))- sum(isnull(ReturnDate),0) from # where id<=a.id)
from #
drop table #
'10001','张三','男','2006-01-01',18152.43,'2006-1-27',
'10001','张三','男','2006-01-01',NULL, Null, 8152.43,'2006-1-31
'10001','张三','男','2006-01-01',18152.43,'2006-2-27', 8152.43,'2006-2-27'
'10001','张三','男','2006-01-01',18152.43,'2006-3-27', null, Null
'10001','张三','男','2006-01-01',18152.43,'2006-4-27', null, Null
'10001','张三','男','2006-01-01',18152.43,'2006-5-27', null, Null显示的还有一些区别~不知道有没有办法~
into #
from(
select top 100 percent *
from(
select a.ContractNumber, a.CustomerName, a.CustomerSex,
b.Customerloan, b.LoanDate,
CustomerReturn = cast(null as decimal(18,3)), ReturnDate=cast(null as datetime)
from tCustomer a
inner join tCustomerLoan b
on a.ContractNumber = b.ContractNumber
union all
select a.ContractNumber, a.CustomerName, a.CustomerSex,
CustomerReturn = cast(null as decimal(18,3)), ReturnDate=cast(null as datetime),
c.CustomerReturn, c.ReturnDate
from tCustomer a
inner join tCustomerReturn c
on a.ContractNumber = c.ContractNumber
)a
order by ContractNumber, isnull(LoanDate, ReturnDate)
)aaselect *, balance=(select sum(isnull(LoanDate,0))- sum(isnull(ReturnDate),0) from # where id<=a.id)
from #
drop table #