表名:table
字段:生产日期,班组,生产数量查询条件为 年度,比如输入2008年 会出现1到12个月,每个班组的生产数据,本班组的小计 和以前累计(其中班组是固定的 4个班组甲乙丙丁)日期   甲班数量  乙班数量   丙班数量  丁班数量   当月小计  累计1       
2
3
4
5
6
7
8
9
10
11
12补充一点是SQL2000数据库~~~~

解决方案 »

  1.   

    等你毕业了 再把SQL发给你
      

  2.   

    你这不只一个  table 吧
    每个班组的生产数据
      

  3.   

    declare @year int 
    set @year=2008select month(生产日期),
    sum(case 班组 when '甲' then 1 end) end as  甲班数量,
    sum(case 班组 when '乙' then 1 end) end as  乙班数量,
    sum(case 班组 when '丙' then 1 end) end as  丙班数量,
    sum(case 班组 when '丁' then 1 end) end as  丁班数量
    from Table where  year(生产日期)=@year
    group by month(生产日期)
    order by  month(生产日期)
      

  4.   

    我想楼主的当月小计有问题,因为既然你在第一列只显示 月 ,那么甲乙丙丁的数量就是该月的小计。
    不知道我的理解是否正确。
    我没有安装SQL Server 所以用Access写了一个,可以参考一下。(没有做当月累计,这个比较简单,累加就可以了。)SELECT distinct FORMAT(TableA.生产日期,'YYYY-MM') AS 日期 , 甲.甲班数量,乙.乙班数量,丙.丙班数量,丁.丁班数量 
    FROM ((((TableA 
         LEFT JOIN ( SELECT  FORMAT(TableA.生产日期,'YYYY-MM') AS 甲生产日期 ,
                            SUM(生产数量) AS 甲班数量
                     FROM TableA 
                     WHERE 班组 ='甲'
                     GROUP BY FORMAT(TableA.生产日期,'YYYY-MM')
                    ) AS 甲  
         ON FORMAT(TableA.生产日期,'YYYY-MM') = 甲.甲生产日期)
         LEFT JOIN ( SELECT  FORMAT(TableA.生产日期,'YYYY-MM') AS 乙生产日期 ,
                            SUM(生产数量) AS 乙班数量
                     FROM TableA 
                     WHERE 班组 ='乙'
                     GROUP BY FORMAT(TableA.生产日期,'YYYY-MM')
                    ) AS 乙 
        ON FORMAT(TableA.生产日期,'YYYY-MM') = 乙.乙生产日期)
        LEFT JOIN ( SELECT  FORMAT(TableA.生产日期,'YYYY-MM') AS 丙生产日期 ,
                            SUM(生产数量) AS 丙班数量
                     FROM TableA 
                     WHERE 班组 ='丙'
                     GROUP BY FORMAT(TableA.生产日期,'YYYY-MM')
                    ) AS 丙 
        ON FORMAT(TableA.生产日期,'YYYY-MM') = 丙.丙生产日期)
        LEFT JOIN ( SELECT  FORMAT(TableA.生产日期,'YYYY-MM') AS 丁生产日期 ,
                            SUM(生产数量) AS 丁班数量
                     FROM TableA 
                     WHERE 班组 ='丁'
                     GROUP BY FORMAT(TableA.生产日期,'YYYY-MM')
                    ) AS 丁 
        ON FORMAT(TableA.生产日期,'YYYY-MM') = 丁.丁生产日期)
      

  5.   

    还有WHERE条件把年加上 如WHERE 班组 ='甲'  AND FORMAT(TableA.生产日期,'YYYY')  ='2008'
      

  6.   

    加上WHERE 条件后如下。
    SELECT distinct FORMAT(TableA.生产日期,'YYYY-MM') AS 日期 , 甲.甲班数量,乙.乙班数量,丙.丙班数量,丁.丁班数量 
    FROM ((((TableA 
         LEFT JOIN ( SELECT  FORMAT(TableA.生产日期,'YYYY-MM') AS 甲生产日期 ,
                            SUM(生产数量) AS 甲班数量
                     FROM TableA 
                     WHERE 班组 ='甲'AND FORMAT(TableA.生产日期,'YYYY')  ='2008'
                     GROUP BY FORMAT(TableA.生产日期,'YYYY-MM')
                    ) AS 甲  
         ON FORMAT(TableA.生产日期,'YYYY-MM') = 甲.甲生产日期)
         LEFT JOIN ( SELECT  FORMAT(TableA.生产日期,'YYYY-MM') AS 乙生产日期 ,
                            SUM(生产数量) AS 乙班数量
                     FROM TableA 
                     WHERE 班组 ='乙'AND FORMAT(TableA.生产日期,'YYYY')  ='2008'
                     GROUP BY FORMAT(TableA.生产日期,'YYYY-MM')
                    ) AS 乙 
        ON FORMAT(TableA.生产日期,'YYYY-MM') = 乙.乙生产日期)
        LEFT JOIN ( SELECT  FORMAT(TableA.生产日期,'YYYY-MM') AS 丙生产日期 ,
                            SUM(生产数量) AS 丙班数量
                     FROM TableA 
                     WHERE 班组 ='丙'AND FORMAT(TableA.生产日期,'YYYY')  ='2008'
                     GROUP BY FORMAT(TableA.生产日期,'YYYY-MM')
                    ) AS 丙 
        ON FORMAT(TableA.生产日期,'YYYY-MM') = 丙.丙生产日期)
        LEFT JOIN ( SELECT  FORMAT(TableA.生产日期,'YYYY-MM') AS 丁生产日期 ,
                            SUM(生产数量) AS 丁班数量
                     FROM TableA 
                     WHERE 班组 ='丁'AND FORMAT(TableA.生产日期,'YYYY')  ='2008'
                     GROUP BY FORMAT(TableA.生产日期,'YYYY-MM')
                    ) AS 丁 
        ON FORMAT(TableA.生产日期,'YYYY-MM') = 丁.丁生产日期)
    WHERE FORMAT(TableA.生产日期,'YYYY')  ='2008'
      

  7.   

    SELECT 1 AS 日期,甲1.生成数量 as 甲班数量,乙1.生成数量 as 乙班数量,丙1.生成数量 as 丙班数量,丁1.生成数量 as 丁班数量,DY1.当月小计,LJ1.累计
    FROM table,
    (select 生成数量  from table where 班组='甲班' WHERE MONTH(生产日期) = 1) 甲1,
    (select 生成数量  from table where 班组='乙班' WHERE MONTH(生产日期) = 1) 乙1,
    (select 生成数量  from table where 班组='丙班' WHERE MONTH(生产日期) = 1) 丙1,
    (select 生成数量  from table where 班组='丁班' WHERE MONTH(生产日期) = 1) 丁1, 
    (select count(生成数量) as 当月小计 from table WHERE MONTH(生产日期) = 1) DY1,
    (select count(生成数量) as 累计 from table WHERE MONTH(生产日期) = 1) LJ1,
    UNION ALL
    SELECT 2 AS 日期,甲2.生成数量 as 甲班数量,乙2.生成数量 as 乙班数量,丙2.生成数量 as 丙班数量,丁2.生成数量 as 丁班数量,DY2.当月小计,LJ2.累计
    FROM table,
    (select 生成数量  from table where 班组='甲班' WHERE MONTH(生产日期) = 2) 甲2,
    (select 生成数量  from table where 班组='乙班' WHERE MONTH(生产日期) = 2) 乙2,
    (select 生成数量  from table where 班组='丙班' WHERE MONTH(生产日期) = 2) 丙2,
    (select 生成数量  from table where 班组='丁班' WHERE MONTH(生产日期) = 2) 丁2, 
    (select count(生成数量) as 当月小计 from table WHERE MONTH(生产日期) = 2) DY2,
    (select count(生成数量) as 累计 from table WHERE (MONTH(生产日期) = 1 or MONTH(生产日期) = 2)) LJ2,
    union all 
    ……
      

  8.   

    SELECT 1 AS 日期,甲1.生成数量 as 甲班数量,乙1.生成数量 as 乙班数量,丙1.生成数量 as 丙班数量,丁1.生成数量 as 丁班数量,DY1.当月小计,LJ1.累计 
    FROM table, 
    (select sum(生成数量) from table where 班组='甲班' WHERE MONTH(生产日期) = 1) 甲1, 
    (select sum(生成数量) from table where 班组='乙班' WHERE MONTH(生产日期) = 1) 乙1, 
    (select sum(生成数量) from table where 班组='丙班' WHERE MONTH(生产日期) = 1) 丙1, 
    (select sum(生成数量) from table where 班组='丁班' WHERE MONTH(生产日期) = 1) 丁1, 
    (select sum(生成数量) as 当月小计 from table WHERE MONTH(生产日期) = 1) DY1, 
    (select sum(生成数量) as 累计 from table WHERE MONTH(生产日期) = 1) LJ1, 
    UNION ALL 
    SELECT 2 AS 日期,甲2.生成数量 as 甲班数量,乙2.生成数量 as 乙班数量,丙2.生成数量 as 丙班数量,丁2.生成数量 as 丁班数量,DY2.当月小计,LJ2.累计 
    FROM table, 
    (select sum(生成数量) from table where 班组='甲班' WHERE MONTH(生产日期) = 2) 甲2, 
    (select sum(生成数量) from table where 班组='乙班' WHERE MONTH(生产日期) = 2) 乙2, 
    (select sum(生成数量) from table where 班组='丙班' WHERE MONTH(生产日期) = 2) 丙2, 
    (select sum(生成数量) from table where 班组='丁班' WHERE MONTH(生产日期) = 2) 丁2, 
    (select sum(生成数量) as 当月小计 from table WHERE MONTH(生产日期) = 2) DY2, 
    (select sum(生成数量) as 累计 from table WHERE (MONTH(生产日期) = 1 or MONTH(生产日期) = 2)) LJ2, 
    union all 
    …… 
      

  9.   

    SELECT MONTH(生产时间) AS 日期, ISNULL 
              ((SELECT SUM(数量) 
              FROM 生产信息LOG 
              WHERE 生产班别 = '甲班' AND year(生产时间) = '2008' AND month(生产时间) 
                    = month(t1.生产时间)), 0) AS 甲班数量, ISNULL 
              ((SELECT SUM(数量) 
              FROM 生产信息LOG 
              WHERE 生产班别 = '乙班' AND year(生产时间) = '2008' AND month(生产时间) 
                    = month(t1.生产时间)), 0) AS 乙班数量, ISNULL 
              ((SELECT SUM(数量) 
              FROM 生产信息LOG 
              WHERE 生产班别 = '丙班' AND year(生产时间) = '2008' AND month(生产时间) 
                    = month(t1.生产时间)), 0) AS 丙班数量, ISNULL 
              ((SELECT SUM(数量) 
              FROM 生产信息LOG 
              WHERE 生产班别 = '丁班' AND year(生产时间) = '2008' AND month(生产时间) 
                    = month(t1.生产时间)), 0) AS 丁班数量, 
              (SELECT SUM(数量) 
            FROM 生产信息LOG 
            WHERE year(生产时间) = '2008' AND month(生产时间) = month(t1.生产时间)) 
          AS 当月小计, 
              (SELECT SUM(数量) 
            FROM 生产信息LOG 
            WHERE year(生产时间) = '2008' AND month(生产时间) <= month(t1.生产时间)) 
          AS 累计 
    FROM 生产信息log t1 
    GROUP BY MONTH(生产时间) 这样执行 为什么会提示  SQL 内部错误????????
      

  10.   

    表名:table 
    字段:生产日期,班组,生产数量 查询条件为 年度,比如输入2008年 会出现1到12个月,每个班组的生产数据,本班组的小计 和以前累计(其中班组是固定的 4个班组甲乙丙丁) 日期  甲班数量  乙班数量  丙班数量  丁班数量  当月小计  累计 select (year(生产日期) & month(生产日期)) as 日期
         ,  sum(case 班组 when '甲' then 生产数量 else 0 end) as 甲班数量
         ,  sum(case 班组 when '乙' then 生产数量 else 0 end) as 乙班数量
         ,  sum(case 班组 when '丙' then 生产数量 else 0 end) as 丙班数量
         ,  sum(case 班组 when '丁' then 生产数量 else 0 end) as 丁班数量
         ,  sum(生产数量) as 当月小计
         ,  (select sum() from table where year(生产日期)=year(a.生产日期) and month(生产日期)  between '01' and month(a.生产日期) ) as   累计
    from table as a
    group by (year(生产日期) & month(生产日期))
      

  11.   

    select (year(生产日期) & month(生产日期)) as 日期 
        ,  sum(case 班组 when '甲' then 生产数量 else 0 end) as 甲班数量 
        ,  sum(case 班组 when '乙' then 生产数量 else 0 end) as 乙班数量 
        ,  sum(case 班组 when '丙' then 生产数量 else 0 end) as 丙班数量 
        ,  sum(case 班组 when '丁' then 生产数量 else 0 end) as 丁班数量 
        ,  sum(生产数量) as 当月小计 
        ,  (select sum() from table where year(生产日期)=year(a.生产日期) and month(生产日期)  between '01' and month(a.生产日期) ) as  累计 
    from table as a 
    group by (year(生产日期) & month(生产日期))
      

  12.   

    select (year(生产日期) & month(生产日期)) as 日期 
        ,  sum(case 班组 when '甲' then 生产数量 else 0 end) as 甲班数量 
        ,  sum(case 班组 when '乙' then 生产数量 else 0 end) as 乙班数量 
        ,  sum(case 班组 when '丙' then 生产数量 else 0 end) as 丙班数量 
        ,  sum(case 班组 when '丁' then 生产数量 else 0 end) as 丁班数量 
        ,  sum(生产数量) as 当月小计 
        ,  (select sum(生产数量) from table where year(生产日期)=year(a.生产日期) and month(生产日期)  between '01' and month(a.生产日期) ) as  累计 
    from table as a 
    group by (year(生产日期) & month(生产日期))