一个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是多少
------解决思路----------------------
------解决思路----------------------
------解决思路----------------------
时间你可以自己改
------解决思路----------------------
------解决思路----------------------
这么多竖杠杠是干嘛?是要先分割然后查询么?
------解决思路----------------------
学习了
产品|||||||地点||||||||||数量||||||||||原因||||||||||||||日期
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 产品,地点
------解决思路----------------------
这么多竖杠杠是干嘛?是要先分割然后查询么?
------解决思路----------------------
学习了