求助,一个求和的问题

KevinL00 2010-09-21 02:33:21
刚入门,这个怎么写呢?

原始:
产品 销量 时间(年月)
a 1 201008
a 1 201007
b 1 201007
b 1 201007
b 1 201008

输出:
产品 7月销量 8月销量
a 1 1
b 2 1

这个sql语句怎么写。
...全文
188 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
KevinL00 2010-09-23
  • 打赏
  • 举报
回复
问题已经解决,感谢各位的支持,在此谢谢!
KevinL00 2010-09-22
  • 打赏
  • 举报
回复
今天看到了大家的积极支持,祝福你和你的家人中秋快乐、幸福健康。
lijianyun_2008 2010-09-22
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql = 'select 产品'
select @sql = @sql + ',sum(case left(时间,6) when '''+时间+''' then 销量 else 0 end) [ '+substring(时间,5,2)+'月销量 ]'
from (select distinct left(时间,6) as '时间' from tb1) as a
set @sql = @sql + ' from tb1 group by 产品'
exec (@sql)
喜-喜 2010-09-22
  • 打赏
  • 举报
回复
中秋快乐
喜-喜 2010-09-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 huahua200188 的回复:]
引用楼主 huahua200188 的回复:
求助,这个怎么写呢?

原始:
产品 销量 时间(年月) 红色部分是日a 1 20100803
a 1 20100706
b 1 20100707
b 1 20100709
b 1 20100806

输出:
产品 7月销量 8月销量
a 1 1
b 2 1

这个sql语句怎么写。(刚才把日漏掉了),继续请教,求助中。。……
[/Quote]
select 产品,
sum(case substring(时间,1,6) when '201007' then 销量 else 0 end) [7月销量],
sum(case substring(时间,1,6) when '201008' then 销量 else 0 end) [8月销量]
from tb
group by 产品

Rotel-刘志东 2010-09-22
  • 打赏
  • 举报
回复
select 产品,
sum(case when 时间='201007' then '销量' else 0 end ) as '7月份销量',
sum(case when 时间='201008' then '销量' else 0 end ) as '8月份销量'
from tb
group by 产品
幸运的意外 2010-09-22
  • 打赏
  • 举报
回复
select 产品,
sum(case substring(时间,1,6) when '201007' then 销量 else 0 end) [7月销量],
sum(case substring(时间,1,6) when '201008' then 销量 else 0 end) [8月销量]
from tb
group by 产品

用case when就可以实现了。
chen8410 2010-09-22
  • 打赏
  • 举报
回复
select 产品,
sum(case when 时间='201007' then '销量' else 0 end ) as '7月份销量',
sum(case when 时间='201008' then '销量' else 0 end ) as '8月份销量'
from tb
group by 产品
Lemon2050 2010-09-21
  • 打赏
  • 举报
回复
一下代码已经自己建表调试过,所以如果执行遇到错误,请自行调试,语句并没有问题:
select 产品,
(select count(销量) from dbo.Sales_Volume where 时间 like '201008 ') as
7月销量,
(select count(销量) from dbo.Sales_Volume where 时间 like '201007 ') as
8月销量

from dbo.Sales_Volume
group by name

这里我假设时间为字符串格式,请根据实际情况做改动。
KevinL00 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 huahua200188 的回复:]
求助,这个怎么写呢?

原始:
产品 销量 时间(年月) 红色部分是日a 1 20100803
a 1 20100706
b 1 20100707
b 1 20100709
b 1 20100806

输出:
产品 7月销量 8月销量
a 1 1
b 2 1

这个sql语句怎么写。(刚才把日漏掉了),继续请教,求助中。。。。。。。
同时感谢以上的回复。
[/Quote]
sinpoal 2010-09-21
  • 打赏
  • 举报
回复

--sql statements---
select c.prod,
max(case when c.s_date=201007 then c.sum_sale else 0 end) ,
max(case when c.s_date=201008 then c.sum_sale else 0 end)
from
(select prod, sum(sale) sum_sale,s_date from test group by prod, s_date) c
group by c.prod
--result---
/* prod 7th_prod 8th_prod
b 2 1
a 1 1*/
dawugui 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huahua200188 的回复:]
我需要相同的要求和,请哪位大哥按照资料,指导一下!
[/Quote]
select 产品,
sum(case 时间 when '201007' then 销量 else 0 end) [7月销量],
sum(case 时间 when '201008' then 销量 else 0 end) [8月销量]
from tb
group by 产品
itxupgy 2010-09-21
  • 打赏
  • 举报
回复

select 产品,sum(case 时间 when '201007' then 销量 else 0 end ) as '7月销量',
sum(case 时间 when '201008' then 销量 else 0 end) as '8月销量'
from 表名
group by 产品
xman_78tom 2010-09-21
  • 打赏
  • 举报
回复

select [产品],
sum(case when [时间]='201007' then [销量] else 0 end) [7月销量],
sum(case when [时间]='201008' then [销量] else 0 end) [8月销量]
from tb
group by [产品];
fpzgm 2010-09-21
  • 打赏
  • 举报
回复

create table tb(产品 char(1) , 销量 int , 时间 char(6))
insert into tb values('a' , '1' , 201008)
insert into tb values('a' , '1' , 201007)
insert into tb values('b' , '1' , 201007)
insert into tb values('b' , '1' , 201007)
insert into tb values('b' , '1' , 201008)
go

with cte as
(select id=row_number()over(partition by 产品 order by 时间),产品,销量,时间
from
(select 产品,SUM(销量) as 销量,时间 from tb group by 产品,时间) t1)
select 产品,max(case id when 1 then 销量 end) as [7月销量],max(case id when 2 then 销量 end) as [8月销量]
from cte group by 产品

----------------------
产品 7月销量 8月销量
a 1 1
b 2 1
----------------------
hello3333 2010-09-21
  • 打赏
  • 举报
回复


select t1=sum(a),t2=sum(b) from 表名 group by 時間
KevinL00 2010-09-21
  • 打赏
  • 举报
回复
我需要相同的要求和,请哪位大哥按照资料,指导一下!
「已注销」 2010-09-21
  • 打赏
  • 举报
回复
参考:
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
*/

create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go

--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名

--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)



select 姓名 , [语文] , [数学] , [物理] from tb
pivot(max(分数) for 课程 in([语文] , [数学] , [物理])) pvt

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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