22,209
社区成员
发帖
与我相关
我的任务
分享
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+','+QUOTENAME(ta.name)+' =max( case ltrim(vorgid) when '''+ltrim(vorgid)+''' then icount else null end)'
from tb join ta on tb.vorgid=ta.vorid
group by ta.name,tb.vorgid
-- print @sql
exec('select ltrim(DATEPART(YEAR,vdata))+''年''+ltrim(DATEPART(M,vdata))+''月''+ltrim(DATEPART(D,vdata))+''日'' as date,
case DATEPART(WEEKDAY,vdata) when 1 then ''周一''
when 2 then ''周二''
when 3 then ''周三''
when 4 then ''周四''
when 5 then ''周五''
when 6 then ''周六''
when 7 then ''周日''
else null end as weekday , 合计=sum(icount)'+@sql+
' from tb group by vdata')
date weekday 合计 湖北 湖南
2010年5月14日 周六 22 NULL 21
2010年5月15日 周日 64 30 29
2010年5月16日 周一 2 NULL NULL
2010年5月17日 周二 30 NULL NULL
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+','+QUOTENAME(ta.name)+' =max( case ltrim(vorgid) when '''+ltrim(vorgid)+''' then icount else null end)'
from tb join ta on tb.vorgid=ta.vorid
group by ta.name,tb.vorgid
-- print @sql
exec('select ltrim(DATEPART(YEAR,vdata))+''年''+ltrim(DATEPART(M,vdata))+''月''+ltrim(DATEPART(D,vdata))+''日'' as date,
case DATEPART(WEEKDAY,vdata) when 1 then ''周一''
when 2 then ''周二''
when 3 then ''周三''
when 4 then ''周四''
when 5 then ''周五''
when 6 then ''周六''
when 7 then ''周日''
else null end as weekday'+@sql+
' from tb group by vdata')
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+','+QUOTENAME(vorgid)+' =max( case ltrim(vorgid) when '''+ltrim(vorgid)+''' then icount else null end)'
from tb
group by vorgid
-- print @sql
exec('select ltrim(DATEPART(YEAR,vdata))+''年''+ltrim(DATEPART(M,vdata))+''月''+ltrim(DATEPART(D,vdata))+''日'' as date,
case DATEPART(WEEKDAY,vdata) when 1 then ''周一''
when 2 then ''周二''
when 3 then ''周三''
when 4 then ''周四''
when 5 then ''周五''
when 6 then ''周六''
when 7 then ''周日''
else null end as weekday'+@sql+
' from tb group by vdata')
date weekday 160 163 171 177 178 212 220
2010年5月14日 周六 21 NULL 1 NULL NULL NULL NULL
2010年5月15日 周日 29 30 NULL NULL 3 NULL NULL
2010年5月16日 周一 NULL NULL NULL 1 1 NULL NULL
2010年5月17日 周二 NULL NULL NULL NULL NULL 15 15
---查询---
declare @sql varchar(8000)
select
@sql=isnull(@sql+',','')
+'sum(case when vorgid='+ltrim(vorgid)+' then icount end) as ['+ltrim(vorgid)+']'
from
(select distinct vorgid from tb) t
exec ('
select
ltrim(month(vdata))+''月''+ltrim(datepart(dd,vdata))+''日'' as 日期,
right(datename(weekday,vdata),1) as 星期,'
+@sql
+'from tb
group by
ltrim(month(vdata))+''月''+ltrim(datepart(dd,vdata))+''日'',
right(datename(weekday,vdata),1)
order by 1')
---结果---
日期 星期 160 163 171 177 178 212 220
---------------------------- ---- ----------- ----------- ----------- ----------- ----------- ----------- -----------
5月14日 五 21 NULL 1 NULL NULL NULL NULL
5月15日 六 29 30 NULL NULL 5 NULL NULL
5月16日 日 NULL NULL NULL 1 1 NULL NULL
5月17日 一 NULL NULL NULL NULL NULL 15 15
(4 行受影响)
---测试数据---
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[vorgid] int,[vunit] int,[vdata] datetime,[icount] int)
insert [tb]
select 1,160,9,'20100514',21 union all
select 2,171,9,'20100514',1 union all
select 3,160,9,'20100515',29 union all
select 4,163,9,'20100515',30 union all
select 6,178,9,'20100515',2 union all
select 7,178,9,'20100515',3 union all
select 8,177,9,'20100516',1 union all
select 9,178,9,'20100516',1 union all
select 10,212,8,'20100517',15 union all
select 11,220,8,'20100517',15
---查询---
declare @sql varchar(8000)
select
@sql=isnull(@sql+',','')
+'sum(case when vorgid='+ltrim(vorgid)+' then icount else 0 end) as ['+ltrim(vorgid)+']'
from
(select distinct vorgid from tb) t
exec ('
select
ltrim(month(vdata))+''月''+ltrim(datepart(dd,vdata))+''日'' as 日期,
right(datename(weekday,vdata),1) as 星期,'
+@sql
+'from tb
group by
ltrim(month(vdata))+''月''+ltrim(datepart(dd,vdata))+''日'',
right(datename(weekday,vdata),1)
order by 1')
---结果---
日期 星期 160 163 171 177 178 212 220
---------------------------- ---- ----------- ----------- ----------- ----------- ----------- ----------- -----------
5月14日 五 21 0 1 0 0 0 0
5月15日 六 29 30 0 0 5 0 0
5月16日 日 0 0 0 1 1 0 0
5月17日 一 0 0 0 0 0 15 15
(4 行受影响)
vdata 160 163 171 177 178 212 220
2010-05-14 21 NULL 1 NULL NULL NULL NULL
2010-05-15 29 30 NULL NULL 3 NULL NULL
2010-05-16 NULL NULL NULL 1 1 NULL NULL
2010-05-17 NULL NULL NULL NULL NULL 15 15
if OBJECT_ID('tb') is not null
drop table tb
go
create table tb(id int,vorgid int,vunit int,vdata date,icount int)
insert into tb
select 1, 160, 9, '20100514' ,21 union all
select 2, 171, 9, '20100514' ,1 union all
select 3, 160, 9, '20100515' ,29 union all
select 4, 163, 9, '20100515' ,30 union all
select 6, 178, 9, '20100515' ,2 union all
select 7, 178, 9, '20100515' ,3 union all
select 8, 177, 9, '20100516' ,1 union all
select 9, 178, 9, '20100516' ,1 union all
select 10, 212, 8, '20100517', 15 union all
select 11, 220, 8, '20100517', 15
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+','+QUOTENAME(vorgid)+' =max( case ltrim(vorgid) when '''+ltrim(vorgid)+''' then icount else null end)'
from tb
group by vorgid
-- print @sql
exec('select vdata '+@sql+' from tb group by vdata')
select vdata ,
sum(case when vorgid =160 then icount else null end) as [160],
sum(case when vorgid =178 then icount else null end) as [178],
sum(case when vorgid =171 then icount else null end) as [171],
sum(case when vorgid =212 then icount else null end) as [212],
sum(case when vorgid =220 then icount else null end) as [220],
sum(case when vorgid =163 then icount else null end) as [163],
sum(case when vorgid =177 then icount else null end) as [177]
from [表]
group by vdata