水   为什么是10条记录, 而烟是4条

解决方案 »

  1.   

    不好意思,打错字了,应该是水和烟都应该是6条
      

  2.   


    create table T1
    (项目名称 varchar(10),项目规格 int,单位 varchar(10),天数 int,天次数 int)insert into T1
     select '水',1,'杯',2,3 union all
     select '烟',1,'包',3,2 union all
     select '酒',1,'瓶',1,1
    select x.项目名称,x.项目规格,x.单位,x.天数,y.天次数,
           (x.天数-1)*x.天次数+y.天次数 '总次数' 
    from
    (select a.项目名称,a.项目规格,a.单位,b.number '天数',a.天次数
     from T1 a
     cross apply
     (select number from master.dbo.spt_values where type='P' and number between 1 and a.天数) b) x
    cross join
    (select a.项目名称,a.项目规格,a.单位,b.number '天次数'
     from T1 a
     cross apply
     (select number from master.dbo.spt_values where type='P' and number between 1 and a.天次数) b) y
    where x.项目名称=y.项目名称/*
    项目名称       项目规格        单位         天数          天次数         总次数
    ---------- ----------- ---------- ----------- ----------- -----------
    水          1           杯          1           1           1
    水          1           杯          1           2           2
    水          1           杯          1           3           3
    水          1           杯          2           1           4
    水          1           杯          2           2           5
    水          1           杯          2           3           6
    烟          1           包          1           1           1
    烟          1           包          1           2           2
    烟          1           包          2           1           3
    烟          1           包          2           2           4
    烟          1           包          3           1           5
    烟          1           包          3           2           6
    酒          1           瓶          1           1           1(13 row(s) affected)
    */