急 急 急 急 行列转换

大雷神 2012-06-30 12:25:40
日期 事情 转变为 星期一 星期二 星期三 星期四 星期五
星期一 八点起床 八点起床 八点起床 ..... ..... .....
星期一 八点半过早 八点半过早 八点半过早 ..... ..... .....
星期一 九点上班 九点上班 九点上班 ...... ..... ....
星期一 十二点午餐 十二点午餐 十二点午餐 ..... ..... .....
星期一 两点上班 两点上班 两点上班 ..... .... ....
星期一 六点下班 六点下班 六点下班 ....... ...... ....


星期二 八点起床
星期二 八点半过早
星期二 九点上班
星期二 十二点午餐
星期二 两点上班
星期二 六点下班

星期三
星期四
星期五
...全文
142 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
我腫了 2012-07-02
  • 打赏
  • 举报
回复

;WITH c AS (
SELECT ROW_NUMBER()OVER(PARTITION BY 日期 ORDER BY GETDATE()) AS Row,* FROM t1
)SELECT [星期一],[星期二],[星期三],[星期四],[星期五] FROM c
PIVOT (
MAX(事情) FOR 日期 IN([星期一],[星期二],[星期三],[星期四],[星期五])
)p
筱筱澄 2012-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

嫂子 不用到博客园复制点东西吧 还是谢谢您了 您打的关键问题 那个有分组条件 姓名 而我上面的不能分组 一分组就报错 事情这个列 的值有可能是重复的 写成死的 我能写出来 活的写一个上午了 还是没搞定 嫂子都是好人啊 怎么写成存储过程调用呢
[/Quote]
你把你写的发上来看看

我给你贴是想要你照葫芦画瓢啊
大雷神 2012-06-30
  • 打赏
  • 举报
回复
嫂子 不用到博客园复制点东西吧 还是谢谢您了 您打的关键问题 那个有分组条件 姓名 而我上面的不能分组 一分组就报错 事情这个列 的值有可能是重复的 写成死的 我能写出来 活的写一个上午了 还是没搞定 嫂子都是好人啊 怎么写成存储过程调用呢
筱筱澄 2012-06-30
  • 打赏
  • 举报
回复
--行列互转
/******************************************************************************************************************************************************
以学生成绩为例子,比较形象易懂

整理人:中国风(Roy)

日期:2008.06.06
******************************************************************************************************************************************************/

--1、行互列
--> --> (Roy)生成測試數據

if not object_id('Class') is null
drop table Class
Go
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
Go
--2000方法:
动态:

declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
from Class group by[Course]
exec('select [Student]'+@s+' from Class group by [Student]')


生成静态:

select
[Student],
[数学]=max(case when [Course]='数学' then [Score] else 0 end),
[物理]=max(case when [Course]='物理' then [Score] else 0 end),
[英语]=max(case when [Course]='英语' then [Score] else 0 end),
[语文]=max(case when [Course]='语文' then [Score] else 0 end)
from
Class
group by [Student]

GO
动态:

declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course]
exec('select * from Class pivot (max([Score]) for [Course] in('+@s+'))b')

生成静态:
select *
from
Class
pivot
(max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b

生成格式:
/*
Student 数学 物理 英语 语文
------- ----------- ----------- ----------- -----------
李四 77 85 65 65
张三 87 90 82 78

(2 行受影响)
*/

------------------------------------------------------------------------------------------
go
--加上总成绩(学科平均分)

--2000方法:
动态:

declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
from Class group by[Course]
exec('select [Student]'+@s+',[总成绩]=sum([Score]) from Class group by [Student]')--加多一列(学科平均分用avg([Score]))

生成动态:

select
[Student],
[数学]=max(case when [Course]='数学' then [Score] else 0 end),
[物理]=max(case when [Course]='物理' then [Score] else 0 end),
[英语]=max(case when [Course]='英语' then [Score] else 0 end),
[语文]=max(case when [Course]='语文' then [Score] else 0 end),
[总成绩]=sum([Score]) --加多一列(学科平均分用avg([Score]))
from
Class
group by [Student]

go

--2005方法:

动态:

declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course] --isnull(@s+',','') 去掉字符串@s中第一个逗号
exec('select [Student],'+@s+',[总成绩] from (select *,[总成绩]=sum([Score])over(partition by [Student]) from Class) a
pivot (max([Score]) for [Course] in('+@s+'))b ')

生成静态:

select
[Student],[数学],[物理],[英语],[语文],[总成绩]
from
(select *,[总成绩]=sum([Score])over(partition by [Student]) from Class) a --平均分时用avg([Score])
pivot
(max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b

生成格式:

/*
Student 数学 物理 英语 语文 总成绩
------- ----------- ----------- ----------- ----------- -----------
李四 77 85 65 65 292
张三 87 90 82 78 337

(2 行受影响)
*/

go

--2、列转行
--> --> (Roy)生成測試數據

if not object_id('Class') is null
drop table Class
Go
Create table Class([Student] nvarchar(2),[数学] int,[物理] int,[英语] int,[语文] int)
Insert Class
select N'李四',77,85,65,65 union all
select N'张三',87,90,82,78
Go

--2000:

动态:

declare @s nvarchar(4000)
select @s=isnull(@s+' union all ','')+'select [Student],[Course]='+quotename(Name,'''')--isnull(@s+' union all ','') 去掉字符串@s中第一个union all
+',[Score]='+quotename(Name)+' from Class'
from syscolumns where ID=object_id('Class') and Name not in('Student')--排除不转换的列
order by Colid
exec('select * from ('+@s+')t order by [Student],[Course]')--增加一个排序

生成静态:
select *
from (select [Student],[Course]='数学',[Score]=[数学] from Class union all
select [Student],[Course]='物理',[Score]=[物理] from Class union all
select [Student],[Course]='英语',[Score]=[英语] from Class union all
select [Student],[Course]='语文',[Score]=[语文] from Class)t
order by [Student],[Course]

go
--2005:

动态:

declare @s nvarchar(4000)
select @s=isnull(@s+',','')+quotename(Name)
from syscolumns where ID=object_id('Class') and Name not in('Student')
order by Colid
exec('select Student,[Course],[Score] from Class unpivot ([Score] for [Course] in('+@s+'))b')

go
select
Student,[Course],[Score]
from
Class
unpivot
([Score] for [Course] in([数学],[物理],[英语],[语文]))b

生成格式:
/*
Student Course Score
------- ------- -----------
李四 数学 77
李四 物理 85
李四 英语 65
李四 语文 65
张三 数学 87
张三 物理 90
张三 英语 82
张三 语文 78

(8 行受影响)
*/
筱筱澄 2012-06-30
  • 打赏
  • 举报
回复
图片挂了,我写了一个不知道可以不
大雷神 2012-06-30
  • 打赏
  • 举报
回复
http://hi.baidu.com/json391/album/item/e8fe96a1c9ea15cec2f278a4b6003af33b87b25e.html#
筱筱澄 2012-06-30
  • 打赏
  • 举报
回复
select case 日期='星期一' then 事情 esle '' end as 星期一,
case 日期='星期二' then 事情 esle '' end as 星期二,
case 日期='星期三' then 事情 esle '' end as 星期三,
case 日期='星期四' then 事情 esle '' end as 星期四,
case 日期='星期五' then 事情 esle '' end as 星期五
from tb
大雷神 2012-06-30
  • 打赏
  • 举报
回复
图片是这样的
大雷神 2012-06-30
  • 打赏
  • 举报
回复
打扰各位加班看帖了 可以用存储过程写吗? 写成活的简单一点的 小弟怎么写都报错

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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