我用这个语句查询,SELECT DATEPART(month, 下单日期) AS ex1, SUM(新版+旧版) AS ex2 
FROM 生产数据表 
where (工艺 LIKE '电雕' OR 工艺 LIKE '手工') and
(下单日期 BETWEEN '2010-1-1' AND '2010-12-31')
GROUP BY DATEPART(month,下单日期) 
ORDER BY DATEPART(month,下单日期)
由于有可能出现某几个月没有订单,所以结果会出现
ex1   ex2
2     55
3     66
6     77
7     88
10    99
有没有办法让结果为,也就是没有订单的月份填充0
ex1     ex2
1       00
2       55
3       66
....
yejhui

解决方案 »

  1.   

    sum(case  ....when.....then 0)
    没看太懂,,,谅解、
      

  2.   

    try
    SELECT A.ID,DATEPART(month, B.下单日期) AS ex1, SUM(B.新版+B.旧版) AS ex2  
    FROM 
    (SELECT TOP 12 ROW_NUMBER() OVER(ORDER BY GETDATE()) AS ID FROM SYS.COLUMNS) AS A  LEFT JOIN 
    生产数据表 AS B ON A.ID = B.DATEPART(month, B.下单日期)
    WHERE (B.工艺 LIKE '电雕' OR B.工艺 LIKE '手工') and
    (B.下单日期 BETWEEN '2010-1-1' AND '2010-12-31')
    GROUP BY DATEPART(month,B.下单日期)  
    ORDER BY DATEPART(month,B.下单日期)
      

  3.   

    select m.* , isnull(n.ex2,0) ex2 from
    (
    select 1 ex1 union
    select 2 ex1 union
    select 3 ex1 union
    select 4 ex1 union
    select 5 ex1 union
    select 6 ex1 union
    select 7 ex1 union
    select 8 ex1 union
    select 9 ex1 union
    select 10 ex1 union
    select 11 ex1 union
    select 12 ex1
    ) m 
    left join
    (
    SELECT DATEPART(month, 下单日期) AS ex1, SUM(新版+旧版) AS ex2  
    FROM 生产数据表  
    where (工艺 LIKE '电雕' OR 工艺 LIKE '手工') and
    (下单日期 BETWEEN '2010-1-1' AND '2010-12-31')
    GROUP BY DATEPART(month,下单日期)  
    ) n
    on m.ex1 = n.ex1
    order by m.ex1
      

  4.   

    参考此贴,同样的问题
    http://topic.csdn.net/u/20110621/10/3b6a20b9-a2d2-481e-96f2-b63275635cfe.html
      

  5.   

    可以用master..spt_values表来构造1到10 的数字  然后和你的结果集LEFT JOIN 一下就可以了