求一条SQL 2005 动态行转列的语句

jack4238 2010-12-22 02:17:41
...全文
281 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
AcHerat 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 josy 的回复:]
SQL code
declare @sql1 varchar(8000),@sql2 varchar(8000)
select
@sql1=isnull(@sql1+',','')
+'sum(case when unitname='''+unitname+''' then quantity else 0 end) as ['+unitname+']',
@sql2=isnu……
[/Quote]

学习!!! 刚学到动态这部分! 大家不要笑....
百年树人 2010-12-23
  • 打赏
  • 举报
回复
declare @sql1 varchar(8000),@sql2 varchar(8000)
select
@sql1=isnull(@sql1+',','')
+'sum(case when unitname='''+unitname+''' then quantity else 0 end) as ['+unitname+']',
@sql2=isnull(@sql2+',','')
+'sum(case when unitname='''+unitname+''' then saleprice*quantity else 0 end) as ['+unitname+']'
from
(select distinct unitname from a_detail) t

set @sql1='select proname,'+@sql1+' from a_detail group by proname'
set @sql2='select productca+''合计'','+@sql2+' from a_detail group by productca'

exec (@sql1+' union all '+@sql2)
  • 打赏
  • 举报
回复
5楼很强大
回头是岸 2010-12-23
  • 打赏
  • 举报
回复
AcHerat 2010-12-23
  • 打赏
  • 举报
回复
排版太累!!! 和SQL里的完全不一样!
AcHerat 2010-12-23
  • 打赏
  • 举报
回复


--生成测试数据
create table a_detail
(
unitname nvarchar(10),
productca nvarchar(10),
proname nvarchar(10),
quantity int,
saleprice int
)

insert a_detail select '技术部','固定资产','笔记本','9','10000'
insert a_detail select '技术部','固定资产','路由器','2','200'
insert a_detail select '研发部','固定资产','笔记本','15','9000'
insert a_detail select '研发部','固定资产','路由器','3','200'
insert a_detail select '研发部','固定资产','投影仪','1','2000'
insert a_detail select '测试部','固定资产','笔记本','4','9000'
insert a_detail select '测试部','耗材', '晒鼓' ,'6','150'

declare @sql varchar(8000)
set @sql = 'select * from ('
set @sql = @sql + 'select proname as product'
select @sql = @sql + ',sum(case unitname when '''+unitname+''' then quantity else 0 end) ['+unitname+']'
from (select distinct unitname from a_detail)U --把所有唯一的单位名称都列举出来
select @sql = @sql + ' from a_detail group by proname,productca'
set @sql = @sql + ' union all '
set @sql = @sql + 'select productca as product'
select @sql = @sql + ',max(case unitname when '''+unitname+''' then saleprice else 0 end ) ['+unitname+']'
from (select distinct unitname from a_detail)N
select @sql = @sql + ' from (select productca,unitname,sum(quantity*saleprice) as saleprice from a_detail group by unitname,productca) as T group by productca) as M'
exec (@sql)

drop table a_detail

product 测试部 技术部 研发部
---------- ----------- ----------- -----------
笔记本 4 9 15
路由器 0 2 3
投影仪 0 0 1
晒鼓 6 0 0
固定资产 36000 90400 137600
耗材 900 0 0

(6 行受影响)
jack4238 2010-12-23
  • 打赏
  • 举报
回复


不好意思,忘记百度对图片有限制了,更新了图片
jack4238 2010-12-23
  • 打赏
  • 举报
回复
呵呵,因为我是用到了二个表,所以新建了一个临时表来存放数据,然后再动态行转列,问题已经解决,谢谢!!!!
billpu 2010-12-22
  • 打赏
  • 举报
回复
改图片仅限百度用户交流使用
cs_lb 2010-12-22
  • 打赏
  • 举报
回复
调整图片再提问 呵呵
dawugui 2010-12-22
  • 打赏
  • 举报
回复
无图无真相.

27,579

社区成员

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

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