请问这个SQL怎么写?

xqi8 2009-11-25 09:53:37
dept 部门 月份 产量
01 1 22
02 2 33
03 1 22
01 2 1
.。。

如何得到下面的结果:


部门 一月 二月 三月 四月 。。。

01 22 33 2 33
02 33 2 2 23
。。。。。。

...全文
53 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqi8 2009-11-25
  • 打赏
  • 举报
回复
thanks.
SQL77 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sgtzzc 的回复:]
剩下11个月留给楼主自己写
[/Quote]
弄个动态的吧,哈哈
sgtzzc 2009-11-25
  • 打赏
  • 举报
回复
剩下11个月留给楼主自己写
--小F-- 2009-11-25
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-11-25 21:54:27
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([部门] varchar(2),[月份] varchar(10),[产量] int)
insert [tb]
select '01',1,22 union all
select '02',2,33 union all
select '03',1,22 union all
select '01',2,1
--------------开始查询--------------------------
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)
----------------结果----------------------------
/*部门 1月 2月
---- ----------- -----------
01 22 1
02 0 33
03 22 0

(3 行受影响)
*/
sgtzzc 2009-11-25
  • 打赏
  • 举报
回复
select 
dept as 部门,
sum(case when 月份=1 then 产量 else 0 end) as [一月],
...
...
from
tb
group by dept
--小F-- 2009-11-25
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-11-25 21:54:27
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([部门] varchar(2),[月份] varchar(10),[产量] int)
insert [tb]
select '01',1,22 union all
select '02',2,33 union all
select '03',1,22 union all
select '01',2,1
--------------开始查询--------------------------
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)
----------------结果----------------------------
/* 部门 1 2
---- ----------- -----------
01 22 1
02 0 33
03 22 0

(3 行受影响)
*/

34,588

社区成员

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

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