sql 分类按月统计
我现在有一个表如下日期名称出售数量2009-9-1a102009-9-3b52009-10-1a502009-10-2b10现在我要得到如下的表名称9月10月a1050b...
我现在有一个表如下
日期 名称 出售数量
2009-9-1 a 10
2009-9-3 b 5
2009-10-1 a 50
2009-10-2 b 10
现在我要得到如下的表
名称 9月 10月
a 10 50
b 5 10
请问这样的SQL语句怎么写呢, 展开
日期 名称 出售数量
2009-9-1 a 10
2009-9-3 b 5
2009-10-1 a 50
2009-10-2 b 10
现在我要得到如下的表
名称 9月 10月
a 10 50
b 5 10
请问这样的SQL语句怎么写呢, 展开
6个回答
展开全部
方法一:这种方法列名是固定的。
select 名称,
sum(case when substring(convert(varchar(7),日期,120),6,2)='09' then 出售数量 else 0 end) as '9月',
sum(case when substring(convert(varchar(7),日期,120),6,2)='10' then 出售数量 else 0 end) as '10月'
from 表
group by 名称
方法二:这种方法虽然麻烦一些,但是支持列名不确定的情况。
declare @sql varchar(2000)
declare @mon varchar(2)
set @sql = 'select 名称'
select @sql = @sql + ',sum(case mon when '''+mon+''' then 出售数量 end) ['+mon+'月]'
from (select distinct substring(convert(varchar(7),日期,120),6,2) mon from 表) as a
select @sql = @sql+' from 表 group by 名称'
exec(@sql)
select 名称,
sum(case when substring(convert(varchar(7),日期,120),6,2)='09' then 出售数量 else 0 end) as '9月',
sum(case when substring(convert(varchar(7),日期,120),6,2)='10' then 出售数量 else 0 end) as '10月'
from 表
group by 名称
方法二:这种方法虽然麻烦一些,但是支持列名不确定的情况。
declare @sql varchar(2000)
declare @mon varchar(2)
set @sql = 'select 名称'
select @sql = @sql + ',sum(case mon when '''+mon+''' then 出售数量 end) ['+mon+'月]'
from (select distinct substring(convert(varchar(7),日期,120),6,2) mon from 表) as a
select @sql = @sql+' from 表 group by 名称'
exec(@sql)
展开全部
sql 分类统计 可以使用 sum group by 统计每个分类的总和
比如统计每个月总销售额
id sell month
1 200 1
2 300 1
3 300 2
4 600 3
select month,sum(sell) from table group by month
结果
month sell
1 500
2 300
3 600
比如统计每个月总销售额
id sell month
1 200 1
2 300 1
3 300 2
4 600 3
select month,sum(sell) from table group by month
结果
month sell
1 500
2 300
3 600
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select 名称,
sum(case when substr(日期,6,1)=9 then 出售数量 else 0 end) as '9月',
sum(case when substr(日期,6,2)=10 then 出售数量 else 0 end) as '10月'
from table
group by 名称;
你试试吧 我用的是oracle 你如果是sql的就把substr改成substring
sum(case when substr(日期,6,1)=9 then 出售数量 else 0 end) as '9月',
sum(case when substr(日期,6,2)=10 then 出售数量 else 0 end) as '10月'
from table
group by 名称;
你试试吧 我用的是oracle 你如果是sql的就把substr改成substring
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SELECT t1.名称, t1.出售数量 as 9月, t2.出售数量 as 10月
FROM 表 as t1, 表 as t2
WHERE t1.名称=t2.名称 AND
extract(month from t1.日期)=9 AND
extract(month from t2.日期)=10;
FROM 表 as t1, 表 as t2
WHERE t1.名称=t2.名称 AND
extract(month from t1.日期)=9 AND
extract(month from t2.日期)=10;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SELECT [名称],sum((1-abs(sign(DATEPART(MONTH,[日期])-9)))*[出售数量]) '9月',
sum((1-abs(sign(DATEPART(MONTH,[日期])-10)))*[出售数量]) '10月'
FROM 表名
GROUP BY [名称]
sum((1-abs(sign(DATEPART(MONTH,[日期])-10)))*[出售数量]) '10月'
FROM 表名
GROUP BY [名称]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询