有谁会做吗?

lijun2000 2006-05-18 02:07:23
表A:
workshop_id resour_name active_name distrb_cost
1 工人工资   培训 400
   2 管理费用    工作计划  300
1 管理费用    工作计划  200
2 工人工资 培训 10
用什么方法可以做成表B:
workshop_id resour_name 培训 工作计划 
1 工人工资  400 0
1 管理费用  0   200
2 工人工资 10 0
2 管理费用  0   300
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xeqtr1982 2006-05-18
  • 打赏
  • 举报
回复
create table tb(workshop_id int,resour_name varchar(20),active_name varchar(20),distrb_cost int)
insert into tb select 1,'工人工资','培训',400
union all select 2,'管理费用','工作计划',300
union all select 1,'管理费用','工作计划',200
union all select 2,'工人工资','培训',10

declare @sql varchar(8000)
set @sql='select workshop_id,resour_name'
select @sql=@sql+',['+active_name+']=sum(case active_name when '''+active_name+''' then distrb_cost else 0 end)' from tb group by active_name
exec(@sql+' from tb group by workshop_id,resour_name order by workshop_id,resour_name')

drop table tb
paoluo 2006-05-18
  • 打赏
  • 举报
回复
--動態語句
Declare @S Nvarchar(4000)
Set @S=''
Select @S=@S+',SUM(Case active_name When N'''+active_name+''' Then distrb_cost Else 0 End) As'+active_name From (Select Distinct active_name From A) B
Select @S='Select workshop_id,resour_name '+@S+' From A Group By workshop_id,resour_name Order By workshop_id,resour_name'
EXEC(@S)
paoluo 2006-05-18
  • 打赏
  • 举报
回复
如果active_name的數據是固定的,可以這麼寫,否則用動態SQL語句。

Select
workshop_id,
resour_name,
SUM(Case active_name When '培训' Then distrb_cost Else 0 End) As 培训,
SUM(Case active_name When '工作计划' Then distrb_cost Else 0 End) As 工作计划
From A
Group By workshop_id,resour_name
Order By workshop_id,resour_name
lijun2000 2006-05-18
  • 打赏
  • 举报
回复
表A:
workshop_id resour_name active_name distrb_cost
1 工人工资   培训 400
   2 管理费用    工作计划  300
1 管理费用    工作计划  200
2 工人工资 培训 10
用什么方法可以做成表B:
workshop_id resour_name  培训  工作计划 
1 工人工资  400 0
1 管理费用   0   200
2 工人工资 10 0
2 管理费用   0   300

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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