CREATE PROCEDURE 多月汇总 
@起始月 CHAR(7) ,                   --类似'2006-02'
@月数 INT,
@代号 INT
AS
begin
declare @endm char(7)
set @endm = convert(char(7),dateadd(mm,convert(datetime,@起始月+'01'),@月数),120)SELECT  代号,产品,产品合计 FROM 合计 WHERE (月份between @起始月and @endm) AND 代号=@代号 
UNION ALL 
SELECT  代号,产品,'' AS 产品合计  FROM  月明细 WHERE (CONVERT(CHAR(7),日期,120) between @起始月 and @endm )AND 代号=@代号end

解决方案 »

  1.   

    CREATE PROCEDURE 多月汇总 
    @起始月 CHAR(7) ,                   --类似'2006-02'
    @月数 INT,
    @代号 INT
    AS
    begin
    declare @endm char(7)
    set @endm = convert(char(7),dateadd(mm,convert(datetime,@起始月+'01'),@月数),120)
    select 代号,产品,产品合计
    from (
    SELECT  代号,产品,产品合计 ,月份 FROM 合计 WHERE (月份 between @起始月and @endm) AND 代号=@代号 
    UNION ALL 
    SELECT  代号,产品,'' AS 产品合计 ,CONVERT(CHAR(7),日期,120) as 月份 FROM  月明细 
    WHERE (CONVERT(CHAR(7),日期,120) between @起始月 and @endm )AND 代号=@代号) a
    order by 月份end
      

  2.   

    谢谢,我想问问有没有办法在存储过程里面保留一个记录集,然后通过循环用UNION语句反复的增加它,然后输出它呢?
    不用临时表行不?
      

  3.   

    谢谢,我想问问有没有办法在存储过程里面保留一个记录集,然后通过循环用UNION语句反复的增加它,然后输出它呢?
    不用临时表行不?
    ---
    表变量如何?否则结果集没处放怎么行啊