数据行列的转换..急。。。

kevin#1 2010-08-12 03:14:11

基本数据:
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日 五

...全文
139 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevin#1 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jaydom 的回复:]
SQL code

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……
[/Quote]


合计的结果不对!
jaydom 2010-08-12
  • 打赏
  • 举报
回复

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
kevin#1 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 pt1314917 的回复:]
已经这么多高手回复了。想必应该解决了吧。。。
[/Quote]

要是能够把 它们的和算出来更好
地区 星期 合 湖南 湖北 。。。 ————把此行放到数据库里面去!
5月17日 一 30 null null null 15 15 null null
5月16日 日 2 null 1 1 null null null null
5月15日 六 ...
5月14日 五
pt1314917 2010-08-12
  • 打赏
  • 举报
回复
已经这么多高手回复了。想必应该解决了吧。。。
jaydom 2010-08-12
  • 打赏
  • 举报
回复


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')

kevin#1 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 liubo_0329 的回复:]
引用 6 楼 josy 的回复:
SQL code
---查询---
declare @sql varchar(8000)
select
@sql=isnull(@sql+',','')
+'sum(case when vorgid='+ltrim(vorgid)+' then icount end) as ['+ltrim(vorgid)+']'
from
(select dis……
[/Quote]
最后显示为
时间 湖南 湖北 ...
湖南 湖北...
null 1...
kevin#1 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 josy 的回复:]
SQL code
---查询---
declare @sql varchar(8000)
select
@sql=isnull(@sql+',','')
+'sum(case when vorgid='+ltrim(vorgid)+' then icount end) as ['+ltrim(vorgid)+']'
from
(select distinct vorgi……
[/Quote]

表:
id vorid name
1 160 湖南
2 163 湖北

怎么替换 160..和其他的数据
你写的怎么来做多表连接 谢谢 我是新手 很多还不懂
kevin#1 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jaydom 的回复:]
SQL code

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-……
[/Quote]

表:
id vorid name
1 160 湖南
2 163 湖北

怎么替换 160..和其他的数据
你写的怎么来做多表连接 谢谢 我是新手 很多还不懂
幸运的意外 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 josy 的回复:]
SQL code
---测试数据---
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',2……
[/Quote]

来晚了,只好引用树人大哥的了。
jaydom 2010-08-12
  • 打赏
  • 举报
回复

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
百年树人 2010-08-12
  • 打赏
  • 举报
回复
---查询---
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 行受影响)
百年树人 2010-08-12
  • 打赏
  • 举报
回复
---测试数据---
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 行受影响)
jaydom 2010-08-12
  • 打赏
  • 举报
回复

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
jaydom 2010-08-12
  • 打赏
  • 举报
回复

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')
kevin#1 2010-08-12
  • 打赏
  • 举报
回复
这个我知道啊 我要动态的。。
天-笑 2010-08-12
  • 打赏
  • 举报
回复

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


22,209

社区成员

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

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