基本数据:
id vorgid vunit vdata icount
1 160 9 20100514 21
2 171 9 20100514 1
3 160 9 20100515 29
4 163 9 20100515 30
6 178 9 20100515 2
7 178 9 20100515 3
8 177 9 20100516 1
9 178 9 20100516 1
10 212 8 20100517 15
11 220 8 20100517 15
后:
160 178 171 212 220 163 177
5月17日 一 null null null 15 15 null null
5月16日 日 null 1 1 null null null null
5月15日 六 ...
5月14日 五
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
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')
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] 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 行受影响)
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 行受影响)
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
表:
id vorid name
1 160 湖南
2 163 湖北怎么替换 160..和其他的数据
你写的怎么来做多表连接 谢谢 我是新手 很多还不懂
表:
id vorid name
1 160 湖南
2 163 湖北怎么替换 160..和其他的数据
你写的怎么来做多表连接 谢谢 我是新手 很多还不懂
时间 湖南 湖北 ...
湖南 湖北...
null 1...
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')
要是能够把 它们的和算出来更好
地区 星期 合 湖南 湖北 ————把此行放到数据库里面去!
5月17日 一 30 null null null 15 15 null null
5月16日 日 2 null 1 1 null null null null
5月15日 六 ...
5月14日 五
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