select convert(varchar(6),日期,112) as 月份,产品,地点,
    sum((case 原因 when '买入' then 1 else -1 end) * 数量)
from tb
group by convert(varchar(6),日期,112),产品,地点

解决方案 »

  1.   

    select
       产品,地点
      sum(case when 原因='买入' then 数量 else -数量 end) as 总数量
    from 
      tb
    where
       datediff(mm,日期,'2014-10-01')=0
    group by
      产品,地点
      

  2.   

    SELECT
    [地点]
    ,SUM(CASE[产品]WHEN 'A' THEN (CASE[原因]WHEN '买入' THEN[数量]ELSE -[数量] END) ELSE 0 END)[A]
    ,SUM(CASE[产品]WHEN 'B' THEN (CASE[原因]WHEN '买入' THEN[数量]ELSE -[数量] END) ELSE 0 END)[B]
    FROM
    TB
    WHERE [日期]BETWEEN '2014-10-1'AND'2014-10-31'
    GROUP BY [地点]
    时间你可以自己改
      

  3.   

    -- 全体分类统计
        SELECT Convert(varchar(7),日期,120) 月份,
               产品,
               地点,
               SUM(数量 * (CASE WHEN 原因='买入' THEN 1 ELSE -1 END)) 总数量
          FROM table1
       GROUP BY Convert(varchar(7),日期,120),产品,地点
    -- 仅10月份
        SELECT 产品,
               地点,
               SUM(数量 * (CASE WHEN 原因='买入' THEN 1 ELSE -1 END)) 总数量
          FROM table1
        WHERE Convert(varchar(7),日期,120) = '2014-10'
       GROUP BY 产品,地点
      

  4.   

    根据 fredrickhu 做出来了  谢谢fredrickhu  也谢谢其他的兄弟姐妹帮忙回答那么多竖杠杠是不用的话  表就靠到一起去了  大家看不清方便大家看的  谢谢大家