有两个各如下:
流水帐表
日期 货号 入库数
2008-1-1 A 10
2008-1-5 B 20
2008-1-10 A 50日期各:
日期
2008-1-1
2008-1-2
2008-1-3
2008-1-4
2008-1-5
2008-1-6
2008-1-7
2008-1-8
2008-1-9
2008-1-10需求得到的查询结果为
日期 货号 入库数
2008-1-1 A 10
2008-1-2 A 0
2008-1-3 A 0
2008-1-4 A 0
2008-1-5 A 0
2008-1-6 A 0
2008-1-7 A 0
2008-1-8 A 0
2008-1-9 A 0
2008-1-10 A 50
2008-1-1 B 0
2008-1-2 B 0
2008-1-3 B 0
2008-1-4 B 0
2008-1-5 B 20
2008-1-6 B 0
2008-1-7 B 0
2008-1-8 B 0
2008-1-9 B 0
2008-1-10 B 0
请高手帮忙,谢谢
流水帐表
日期 货号 入库数
2008-1-1 A 10
2008-1-5 B 20
2008-1-10 A 50日期各:
日期
2008-1-1
2008-1-2
2008-1-3
2008-1-4
2008-1-5
2008-1-6
2008-1-7
2008-1-8
2008-1-9
2008-1-10需求得到的查询结果为
日期 货号 入库数
2008-1-1 A 10
2008-1-2 A 0
2008-1-3 A 0
2008-1-4 A 0
2008-1-5 A 0
2008-1-6 A 0
2008-1-7 A 0
2008-1-8 A 0
2008-1-9 A 0
2008-1-10 A 50
2008-1-1 B 0
2008-1-2 B 0
2008-1-3 B 0
2008-1-4 B 0
2008-1-5 B 20
2008-1-6 B 0
2008-1-7 B 0
2008-1-8 B 0
2008-1-9 B 0
2008-1-10 B 0
请高手帮忙,谢谢
union all
select 日期 , 货号 = '' , 入库数 = 0 from 日期表
order by 货号,日期
select B.日期,B.货号,A.入库数
from 流水帐表 A right join
(select TA.货号,TB.日期 from (select DISTINCT 货号 from 流水帐) TA,日期 TB ) B
on A.货号=B.货号 and A.日期 =B.日期
/*流水帐表
日期 货号 入库数*/
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 convert(char(10),riqi.rq,120) as '日期',isnull(hh,0) as '货号',isnull(rks,0) as '入库数' from riqi full join t1 on riqi.rq=t1.rq
go
drop table t1,riqi
go(3 行受影响)(10 行受影响)
日期 货号 入库数
---------- ---- -----------
2008-01-01 A 10
2008-01-02 0 0
2008-01-03 0 0
2008-01-04 0 0
2008-01-05 B 20
2008-01-06 0 0
2008-01-07 0 0
2008-01-08 0 0
2008-01-09 0 0
2008-01-10 A 50(10 行受影响)
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')
goselect 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(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'
goselect 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.日期
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')
goselect 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(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')
goselect 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 行)
*/
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')
goselect 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 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
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.货号