字段:班组    数量     时间 甲班    10    2008-09-01
乙班    3     2008-10-01
...
是这样的结构, 
其中要说明的是 我的查询条件是按年和月查询,比如我要查询的是2008年9月 我要查询出的结果是:
    日期         甲班数量    乙班数量  丙班数量  丁班数量  当日小计    累计   2008-09-01     
2008-09-02
2008-09-03  
......一共是4个班,日期是 一天一天的,如这天没数据就为0, 当日小计 就是把 4个班当天的相加,累计就是把 今天的数据加上这个月以
前的所有数据,跪求这样的SQL

解决方案 »

  1.   

    select 日期 
          ,(case   班组 when  '甲班' then  sum(数量) else 0 end) as  甲班数量        
          ,(case   班组 when  '甲班' then  sum(数量) else 0 end) as  乙班数量
          ,(case   班组 when  '甲班' then  sum(数量) else 0 end) as  丙班数量
          ,(case   班组 when  '甲班' then  sum(数量) else 0 end) as  丁班数量
          , sum(数量) as 当日小计
          ,(select sum(数量) from mytable where 日期 between (substr(a.日期,1,7) || '-01') and a.日期) as  累计 
    from mytable a
    where substr(日期,1,7)= '2008-09'
      

  2.   

    select 日期 
          ,(case  班组 when  '甲班' then  sum(数量) else 0 end) as  甲班数量        
          ,(case  班组 when  '乙班' then  sum(数量) else 0 end) as  乙班数量 
          ,(case  班组 when  '丙班' then  sum(数量) else 0 end) as  丙班数量 
          ,(case  班组 when  '丁班' then  sum(数量) else 0 end) as  丁班数量 
          , sum(数量) as 当日小计 
          ,(select sum(数量) from mytable where 日期 between (substr(a.日期,1,7) || '-01') and a.日期) as  累计 
    from mytable a 
    where substr(日期,1,7)= '2008-09' 
    group by 日期
      

  3.   

    select 日期 
          ,(case  班组 when  '甲班' then  sum(数量) else 0 end) as  甲班数量        
          ,(case  班组 when  '乙班' then  sum(数量) else 0 end) as  乙班数量 
          ,(case  班组 when  '丙班' then  sum(数量) else 0 end) as  丙班数量 
          ,(case  班组 when  '丁班' then  sum(数量) else 0 end) as  丁班数量 
          , sum(数量) as 当日小计 
          ,(select sum(数量) from mytable where 日期 between (substring(a.日期,1,7) & '-01') and a.日期) as  累计 
    from mytable a 
    where substring(日期,1,7)= '2008-09' 
    group by 日期
      

  4.   

    SELECT 时间, (CASE 班别 WHEN '甲班' THEN SUM(数量) ELSE 0 END) AS 甲班数量,(CASE 班别 WHEN '乙班' THEN SUM(数量) ELSE 0 END) AS 乙班数量,(CASE 班别 WHEN '丙班' THEN SUM(数量) ELSE 0 END) AS 丙班数量,(CASE 班别 WHEN '丁班' THEN SUM(数量) ELSE 0 END) AS 丁班数量, SUM(数量) AS 当日小计,(SELECT SUM(数量) From 库存表 WHERE 时间 BETWEEN '2008-10-01' AND a.时间) AS 累计 FROM 库存表 a WHERE LEFT(时间, 7) = '2008-10' and 是否显示='1' Group By 班别,时间这样写 能执行  但如果1天 有2个班组 数据,就显示 2个日期   我的意思是要显示一个日期,然后 甲乙丙丁  同一行显示~~~~
      

  5.   

    SELECT 时间 
          ,SUM(甲班数量) AS 甲班数量 
          ,SUM(乙班数量) AS 乙班数量 
          ,SUM(丙班数量) AS 丙班数量 
          ,SUM(丁班数量) AS 丁班数量 
          ,SUM(当日小计) AS 当日小计 
          ,SUM(累计)  AS 累计 
    FROM ( 
        SELECT 时间 
                ,(CASE 班别 WHEN '甲班' THEN SUM(数量) ELSE 0 END) AS 甲班数量 
                ,(CASE 班别 WHEN '乙班' THEN SUM(数量) ELSE 0 END) AS 乙班数量 
                ,(CASE 班别 WHEN '丙班' THEN SUM(数量) ELSE 0 END) AS 丙班数量 
                ,(CASE 班别 WHEN '丁班' THEN SUM(数量) ELSE 0 END) AS 丁班数量 
                , SUM(数量) AS 当日小计 
                ,(SELECT SUM(数量) From 库存表 WHERE 时间 BETWEEN '2008-10-01' AND a.时间) AS 累计 
          FROM 库存表 a 
        WHERE LEFT(时间, 7) = '2008-10' 
          and 是否显示='1' 
          Group By 班别,时间 
          ) 
    GROUP BY 时间