有两个各如下:
流水帐表
日期             货号  入库数
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
请高手帮忙,谢谢

解决方案 »

  1.   

    select * from 流水帐表 
    union all
    select 日期 , 货号 = '' , 入库数 = 0 from 日期表
    order by 货号,日期
      

  2.   


    select B.日期,B.货号,A.入库数
     from 流水帐表 A right join
          (select TA.货号,TB.日期  from (select DISTINCT 货号 from 流水帐) TA,日期 TB ) B 
           on A.货号=B.货号 and A.日期 =B.日期 
      

  3.   

    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 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 行受影响)
      

  4.   

    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 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 行)
    */
      

  5.   


    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.日期 
      

  6.   

    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 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 行)
    */
      

  7.   

    --我前面的都不完善,这个可以了.
    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 行)
    */
      

  8.   

    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 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 行)
    */
      

  9.   


    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
      

  10.   


    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.货号