22,209
社区成员
发帖
与我相关
我的任务
分享
create table tmp
(
fday varchar(2),
fitem varchar(30),
fph varchar(10),
fbc varchar(20),
fqty decimal(18,4)
)
insert into tmp
select '01','S816','第七批','乙班',100
insert into tmp
select '02','S816','第七批','甲班',600
insert into tmp
select '02','S816','第七批','乙班',850
insert into tmp
select '03','S816','第七批','甲班',650
go
declare @sql varchar(8000)
set @sql = 'select fday '
select @sql = @sql + ' , max(case when fitem = ''' + fitem + ''' and fph = ''' + fph + ''' and fbc = ''' + fbc + ''' then fqty else 0 end) [' + fitem + '|' + fph + '|' + fbc + ']'
from (select distinct fitem,fph,fbc from tmp) as a
set @sql = @sql + ' ,sum(fqty) 合计 from tmp group by fday '
exec(@sql)
drop table tmp
/*
fday S816|第七批|甲班 S816|第七批|乙班 合计
---- -------------------- -------------------- ----------------------------------------
01 .0000 100.0000 100.0000
02 600.0000 850.0000 1450.0000
03 650.0000 .0000 650.0000
*/
create table tmp
(
fday varchar(2),
fitem varchar(30),
fph varchar(10),
fbc varchar(20),
fqty decimal(18,4)
)
insert into tmp
select '01','S816','第七批','乙班',100
insert into tmp
select '02','S816','第七批','甲班',600
insert into tmp
select '02','S816','第七批','乙班',850
insert into tmp
select '03','S816','第七批','甲班',650
go
declare @sql varchar(8000)
set @sql = 'select fday,fitem '
select @sql = @sql + ' , max(case when fph = ''' + fph + ''' and fbc = ''' + fbc + ''' then fqty else 0 end) ' + fph + '_' + fbc
from (select distinct fph,fbc from tmp) as a
set @sql = @sql + ' ,sum(fqty) 合计 from tmp group by fday,fitem '
exec(@sql)
drop table tmp
/*
fday fitem 第七批_甲班 第七批_乙班 合计
---- ------------------------------ -------------------- -------------------- ----------------------------------------
01 S816 .0000 100.0000 100.0000
02 S816 600.0000 850.0000 1450.0000
03 S816 650.0000 .0000 650.0000
*/
declare @sql varchar(8000)
set @sql = 'select fday '
select @sql = @sql + ' , max(case fbc when ''' + fbc + ''' then fqty else 0 end) [' + fitem+'|'+fph+'|'+fbc + ']'
from (select distinct fbc from tb) as a
set @sql = @sql + ',sum(qty) as ''合计'' from tb group by fday'
exec(@sql)
declare @sql varchar(8000)
set @sql = 'select fday '
select @sql = @sql + ' , max(case fbc when ''' + fbc + ''' then fqty else 0 end) [' + fitem+'|'+fph+'|'+fbc + ']'
from (select distinct fbc from tb) as a
set @sql = @sql + ' from tb group by fday'
exec(@sql)
--SQL2005
declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename(fitem+'|'+fph+'|'+fbc) from #tmp group by fitem,fph,fbc
exec('select * from (select fday,fitem+''|''+fph+''|''+fbc as Col,fqty from #tmp) as a pivot (max(fqty) for Col in('+@s+'))b')
/*
fday S816|第七批|甲班 S816|第七批|乙班
01 NULL 100.0000
02 600.0000 850.0000
03 650.0000 NULL
*/
create table #tmp
(
fday varchar(2),
fitem varchar(30),
fph varchar(10),
fbc varchar(20),
fqty decimal(18,4)
)
insert into #tmp
select '01','S816','第七批','乙班',100
insert into #tmp
select '02','S816','第七批','甲班',600
insert into #tmp
select '02','S816','第七批','乙班',850
insert into #tmp
select '03','S816','第七批','甲班',650
declare @s nvarchar(4000)
set @s=''
Select @s=@s+N','+quotename(fitem+'|'+fph+'|'+fbc)+N'=sum(case when fitem=N'+quotename(fitem,'''')+' and fph=N'+quotename(fph,'''')+N' and fbc=N'+QUOTENAME(fbc,'''')+ ' then fqty else 0 end)'
from #tmp
group by fitem,fph,fbc
--顯示生成語句
print N'select fday'+@s+N',sum(fqty) as 合计 from #tmp group by fday'
exec(N'select fday'+@s+N',sum(fqty) as 合计 from #tmp group by fday')
go
/*
fday S816|第七批|甲班 S816|第七批|乙班 合计
01 0.0000 100.0000 100.0000
02 600.0000 850.0000 1450.0000
03 650.0000 0.0000 650.0000
*/
/*
select fday,[S816|第七批|甲班]=sum(case when fitem=N'S816' and fph=N'第七批' and fbc=N'甲班' then fqty else 0 end),[S816|第七批|乙班]=sum(case when fitem=N'S816' and fph=N'第七批' and fbc=N'乙班' then fqty else 0 end),sum(fqty) as 合计 from #tmp group by fday
*/
select
fday,
sum(case when fbc='甲班' then fqty else 0 end) as 's816|第七批|甲班',
sum(case when fbc='乙班' then fqty else 0 end) as 's816|第七批|乙班',
sum(fqty) as '合计'
from
#tmp
group by
fday