请教大家一个SQL分类统计的SQL语句

yanchangshan 2014-11-04 11:35:19
产品|||||||地点||||||||||数量||||||||||原因||||||||||||||日期
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是多少
...全文
203 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanchangshan 2014-11-05
  • 打赏
  • 举报
回复
根据 fredrickhu 做出来了 谢谢fredrickhu 也谢谢其他的兄弟姐妹帮忙回答 那么多竖杠杠是不用的话 表就靠到一起去了 大家看不清方便大家看的 谢谢大家
Tiger_Zhao 2014-11-04
  • 打赏
  • 举报
回复
-- 全体分类统计
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 产品,地点
还在加载中灬 2014-11-04
  • 打赏
  • 举报
回复
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 [地点]
时间你可以自己改
--小F-- 2014-11-04
  • 打赏
  • 举报
回复
select
   产品,地点
  sum(case when 原因='买入' then 数量 else -数量 end) as 总数量
from 
  tb
where
   datediff(mm,日期,'2014-10-01')=0
group by
  产品,地点
AcHerat 元老 2014-11-04
  • 打赏
  • 举报
回复

select convert(varchar(6),日期,112) as 月份,产品,地点,
    sum((case 原因 when '买入' then 1 else -1 end) * 数量)
from tb
group by convert(varchar(6),日期,112),产品,地点
RICHEER COCA 2014-11-04
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
-- 全体分类统计
    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 产品,地点
学习了
以学习为目的 2014-11-04
  • 打赏
  • 举报
回复
这么多竖杠杠是干嘛?是要先分割然后查询么?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧