一个SQL分类统计的SQL语句

请教大家一个SQL分类统计的SQL语句
产品|||||||地点||||||||||数量||||||||||原因||||||||||||||日期
A|||||||||||| 1楼|||||||||||| 10|||||||||||| 买入|||||||||||| 2014-10-1
A|||||||||||| 1楼|||||||||||| 2|||||||||||| 吃掉|||||||||||| 2014-10-1
A|||||||||||| 1楼|||||||||||| 3|||||||||||| 送人|||||||||||| 2014-10-3
B|||||||||||| 1楼|||||||||||| 23|||||||||||| 买入|||||||||||| 2014-10-1
B|||||||||||| 1楼|||||||||||| 2|||||||||||| 吃掉|||||||||||| 2014-10-1
B|||||||||||| 1楼|||||||||||| 3|||||||||||| 送人|||||||||||| 2014-10-3
A|||||||||||| 2楼|||||||||||| 10|||||||||||| |买入||||||||||||2014-10-1
A|||||||||||| 2楼|||||||||||| 2|||||||||||| 吃掉|||||||||||| 2014-10-1
A|||||||||||| 2楼|||||||||||| 3|||||||||||| 送人|||||||||||| 2014-10-3
B|||||||||||| 2楼|||||||||||| 23|||||||||||| 买入|||||||||||| 2014-10-1
B|||||||||||| 2楼|||||||||||| 2|||||||||||| 吃掉|||||||||||| 2014-10-1
B|||||||||||| 2楼|||||||||||| 3|||||||||||| 送人|||||||||||| 2014-10-3
A|||||||||||| 1楼|||||||||||| 10|||||||||||| 买入|||||||||||| 2014-9-1
A|||||||||||| 1楼|||||||||||| 2|||||||||||| 吃掉|||||||||||| 2014-9-1
A|||||||||||| 1楼|||||||||||| 3|||||||||||| 送人|||||||||||| 2014-9-3

如上表所示 我要统计根据月份  根据地点  每个产品 如果原因是买入就是加  其余的都是减
各是多少 

比如 : 我要得到  10月份  在1 楼 A是多少 B是多少 2楼 A是多少 B是多少
------解决思路----------------------

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

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

------解决思路----------------------
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 [地点]

时间你可以自己改
------解决思路----------------------
-- 全体分类统计
    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 产品,地点

------解决思路----------------------
这么多竖杠杠是干嘛?是要先分割然后查询么?
------解决思路----------------------
引用:
-- 全体分类统计
    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 产品,地点


学习了一个SQL分类统计的SQL语句