34,837
社区成员




declare @a table([日期] varchar(10),[货号] varchar(2),[入库数] int)
insert into @a
select '2008-1-1','A',10
union select '2008-1-5','B',20
union select '2008-1-10','A',50
declare @b table([日期] varchar(10))
insert into @b
select '2008-1-1'
union all select '2008-1-2'
union all select '2008-1-3'
union all select '2008-1-4'
union all select '2008-1-5'
union all select '2008-1-6'
union all select '2008-1-7'
union all select '2008-1-8'
union all select '2008-1-9'
union all select '2008-1-10'
select y.日期,y.货号,ISNULL(x.入库数,0)as 入库数 from @a x
right join
(select * from @b b cross join (select distinct 货号 from @a) a)y on x.日期 = y.日期 and x.货号 = y.货号
order by y.货号
create table t1(rq datetime,hh varchar(2),rks int)
go
insert into t1
select '2008-1-1','A',10
union select '2008-1-5','B',20
union select '2008-1-10','A',50
go
create table riqi(rq datetime)
go
insert into riqi
select '2008-1-1'
union all select '2008-1-2'
union all select '2008-1-3'
union all select '2008-1-4'
union all select '2008-1-5'
union all select '2008-1-6'
union all select '2008-1-7'
union all select '2008-1-8'
union all select '2008-1-9'
union all select '2008-1-10'
go
select a.rq,a.hh,isnull(rks,0) as rks from
(select * from (select distinct hh from t1 ) t1,riqi) a left join t1 b
on a.rq=b.rq and a.hh=b.hh
create table 流水帐表(日期 datetime, 货号 varchar(10), 入库数 int)
insert into 流水帐表 values('2008-1-1 ', 'A', 10 )
insert into 流水帐表 values('2008-1-5 ', 'B', 20 )
insert into 流水帐表 values('2008-1-10', 'A', 50 )
create table 日期表(日期 datetime)
insert into 日期表 values('2008-1-1 ')
insert into 日期表 values('2008-1-2 ')
insert into 日期表 values('2008-1-3 ')
insert into 日期表 values('2008-1-4 ')
insert into 日期表 values('2008-1-5 ')
insert into 日期表 values('2008-1-6 ')
insert into 日期表 values('2008-1-7 ')
insert into 日期表 values('2008-1-8 ')
insert into 日期表 values('2008-1-9 ')
insert into 日期表 values('2008-1-10')
go
select m.日期 , 货号 = 'A' , isnull(n.入库数,0) 入库数 from 日期表 m left join 流水帐表 n on m.日期 = n.日期
union all
select m.日期 , 货号 = 'B' , isnull(n.入库数,0) 入库数 from 日期表 m left join 流水帐表 n on m.日期 = n.日期
drop table 流水帐表,日期表
/*
日期 货号 入库数
------------------------------------------------------ ---- -----------
2008-01-01 00:00:00.000 A 10
2008-01-02 00:00:00.000 A 0
2008-01-03 00:00:00.000 A 0
2008-01-04 00:00:00.000 A 0
2008-01-05 00:00:00.000 A 20
2008-01-06 00:00:00.000 A 0
2008-01-07 00:00:00.000 A 0
2008-01-08 00:00:00.000 A 0
2008-01-09 00:00:00.000 A 0
2008-01-10 00:00:00.000 A 50
2008-01-01 00:00:00.000 B 10
2008-01-02 00:00:00.000 B 0
2008-01-03 00:00:00.000 B 0
2008-01-04 00:00:00.000 B 0
2008-01-05 00:00:00.000 B 20
2008-01-06 00:00:00.000 B 0
2008-01-07 00:00:00.000 B 0
2008-01-08 00:00:00.000 B 0
2008-01-09 00:00:00.000 B 0
2008-01-10 00:00:00.000 B 50
(所影响的行数为 20 行)
*/
--我前面的都不完善,这个可以了.
create table 流水帐表(日期 datetime, 货号 varchar(10), 入库数 int)
insert into 流水帐表 values('2008-1-1 ', 'A', 10 )
insert into 流水帐表 values('2008-1-5 ', 'B', 20 )
insert into 流水帐表 values('2008-1-10', 'A', 50 )
create table 日期表(日期 datetime)
insert into 日期表 values('2008-1-1 ')
insert into 日期表 values('2008-1-2 ')
insert into 日期表 values('2008-1-3 ')
insert into 日期表 values('2008-1-4 ')
insert into 日期表 values('2008-1-5 ')
insert into 日期表 values('2008-1-6 ')
insert into 日期表 values('2008-1-7 ')
insert into 日期表 values('2008-1-8 ')
insert into 日期表 values('2008-1-9 ')
insert into 日期表 values('2008-1-10')
go
select t1.* , isnull(t2.入库数,0) 入库数 from
(select n.日期 , m.货号 from (select distinct 货号 from 流水帐表) m , 日期表 n) t1
full join 流水帐表 t2
on t1.日期 = t2.日期 and t1.货号 = t2.货号
drop table 流水帐表,日期表
/*
日期 货号 入库数
------------------------------------------------------ ---- -----------
2008-01-01 00:00:00.000 A 10
2008-01-02 00:00:00.000 A 0
2008-01-03 00:00:00.000 A 0
2008-01-04 00:00:00.000 A 0
2008-01-05 00:00:00.000 A 0
2008-01-06 00:00:00.000 A 0
2008-01-07 00:00:00.000 A 0
2008-01-08 00:00:00.000 A 0
2008-01-09 00:00:00.000 A 0
2008-01-10 00:00:00.000 A 50
2008-01-01 00:00:00.000 B 0
2008-01-02 00:00:00.000 B 0
2008-01-03 00:00:00.000 B 0
2008-01-04 00:00:00.000 B 0
2008-01-05 00:00:00.000 B 20
2008-01-06 00:00:00.000 B 0
2008-01-07 00:00:00.000 B 0
2008-01-08 00:00:00.000 B 0
2008-01-09 00:00:00.000 B 0
2008-01-10 00:00:00.000 B 0
(所影响的行数为 20 行)
*/
create table 流水帐表(日期 datetime, 货号 varchar(10), 入库数 int)
insert into 流水帐表 values('2008-1-1 ', 'A', 10 )
insert into 流水帐表 values('2008-1-5 ', 'B', 20 )
insert into 流水帐表 values('2008-1-10', 'A', 50 )
create table 日期表(日期 datetime)
insert into 日期表 values('2008-1-1 ')
insert into 日期表 values('2008-1-2 ')
insert into 日期表 values('2008-1-3 ')
insert into 日期表 values('2008-1-4 ')
insert into 日期表 values('2008-1-5 ')
insert into 日期表 values('2008-1-6 ')
insert into 日期表 values('2008-1-7 ')
insert into 日期表 values('2008-1-8 ')
insert into 日期表 values('2008-1-9 ')
insert into 日期表 values('2008-1-10')
go
select m.日期 , 货号 = 'A' , isnull(n.入库数,0) 入库数 from 日期表 m left join 流水帐表 n on m.日期 = n.日期 and n.货号 = 'A'
union all
select m.日期 , 货号 = 'B' , isnull(n.入库数,0) 入库数 from 日期表 m left join 流水帐表 n on m.日期 = n.日期 and n.货号 = 'B'
drop table 流水帐表,日期表
/*
日期 货号 入库数
------------------------------------------------------ ---- -----------
2008-01-01 00:00:00.000 A 10
2008-01-02 00:00:00.000 A 0
2008-01-03 00:00:00.000 A 0
2008-01-04 00:00:00.000 A 0
2008-01-05 00:00:00.000 A 0
2008-01-06 00:00:00.000 A 0
2008-01-07 00:00:00.000 A 0
2008-01-08 00:00:00.000 A 0
2008-01-09 00:00:00.000 A 0
2008-01-10 00:00:00.000 A 50
2008-01-01 00:00:00.000 B 0
2008-01-02 00:00:00.000 B 0
2008-01-03 00:00:00.000 B 0
2008-01-04 00:00:00.000 B 0
2008-01-05 00:00:00.000 B 20
2008-01-06 00:00:00.000 B 0
2008-01-07 00:00:00.000 B 0
2008-01-08 00:00:00.000 B 0
2008-01-09 00:00:00.000 B 0
2008-01-10 00:00:00.000 B 0
(所影响的行数为 20 行)
*/
create table 流水帐(日期 datetime,货号 varchar(2),入库数 int)
go
insert into 流水帐
select '2008-1-1','A',10
union select '2008-1-5','B',20
union select '2008-1-10','A',50
go
create table 日期(日期 datetime)
go
insert into 日期
select '2008-1-1'
union all select '2008-1-2'
union all select '2008-1-3'
union all select '2008-1-4'
union all select '2008-1-5'
union all select '2008-1-6'
union all select '2008-1-7'
union all select '2008-1-8'
union all select '2008-1-9'
union all select '2008-1-10'
go
select B.日期,B.货号,isnull(A.入库数,0) as 入库数
from 流水帐 A right join
(select TA.货号,TB.日期 from (select DISTINCT 货号 from 流水帐) TA,日期 TB ) B
on A.货号=B.货号 and A.日期 =B.日期
create table 流水帐表(日期 datetime, 货号 varchar(10), 入库数 int)
insert into 流水帐表 values('2008-1-1 ', 'A', 10 )
insert into 流水帐表 values('2008-1-5 ', 'B', 20 )
insert into 流水帐表 values('2008-1-10', 'A', 50 )
create table 日期表(日期 datetime)
insert into 日期表 values('2008-1-1 ')
insert into 日期表 values('2008-1-2 ')
insert into 日期表 values('2008-1-3 ')
insert into 日期表 values('2008-1-4 ')
insert into 日期表 values('2008-1-5 ')
insert into 日期表 values('2008-1-6 ')
insert into 日期表 values('2008-1-7 ')
insert into 日期表 values('2008-1-8 ')
insert into 日期表 values('2008-1-9 ')
insert into 日期表 values('2008-1-10')
go
select m.日期 , 货号 = 'A' , isnull(n.入库数,0) 入库数 from 日期表 m left join 流水帐表 n on m.日期 = n.日期
union all
select m.日期 , 货号 = 'B' , isnull(n.入库数,0) 入库数 from 日期表 m left join 流水帐表 n on m.日期 = n.日期
drop table 流水帐表,日期表
/*
日期 货号 入库数
------------------------------------------------------ ---- -----------
2008-01-01 00:00:00.000 A 10
2008-01-02 00:00:00.000 A 0
2008-01-03 00:00:00.000 A 0
2008-01-04 00:00:00.000 A 0
2008-01-05 00:00:00.000 A 20
2008-01-06 00:00:00.000 A 0
2008-01-07 00:00:00.000 A 0
2008-01-08 00:00:00.000 A 0
2008-01-09 00:00:00.000 A 0
2008-01-10 00:00:00.000 A 50
2008-01-01 00:00:00.000 B 10
2008-01-02 00:00:00.000 B 0
2008-01-03 00:00:00.000 B 0
2008-01-04 00:00:00.000 B 0
2008-01-05 00:00:00.000 B 20
2008-01-06 00:00:00.000 B 0
2008-01-07 00:00:00.000 B 0
2008-01-08 00:00:00.000 B 0
2008-01-09 00:00:00.000 B 0
2008-01-10 00:00:00.000 B 50
(所影响的行数为 20 行)
*/
select B.日期,B.货号,A.入库数
from 流水帐表 A right join
(select TA.货号,TB.日期 from (select DISTINCT 货号 from 流水帐) TA,日期 TB ) B
on A.货号=B.货号 and A.日期 =B.日期
select * from 流水帐表
union all
select 日期 , 货号 = '' , 入库数 = 0 from 日期表
order by 货号,日期