转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
动态SQL语句在SQLServer中非固定行的转列应用         

动态SQL语句在SQLServer中非固定行的转列应用

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1129 更新时间:2007/11/14 12:20:29

社区里有人提问一个行转列的应用,在SQLServer中都是用Case的,我随便答了一下,由于是非固定行,有网友给我发消息问怎么实现,详细来说一下。

相关联接
http://community.csdn.net/Expert/topic/3417/3417326.xml?temp=.8530084

Answer:

F1      F2
jack    book1
jack    book2
jack    book3
mary    book4
mary    book5
...

转化为
F1    F2    F3    F4    F5
jack       book1     book2     book3
mary      book4     book5
billy       book6     book7

--------------------------------------------

测试过程:
--------------------------------------------


create table Test
(F1 char(10),
 F2 char(10))

--测试表

insert into Test
select ''''jack'''' F1,''''book1'''' F2
union
select ''''jack'''' F1,''''book2'''' F2
union
select ''''jack'''' F1,''''book3'''' F2
union
select ''''Mary'''' F1,''''book4'''' F2
union
select ''''Mary'''' F1,''''book5'''' F2
union
select ''''Mike'''' F1,''''book1'''' F2
union
select ''''Mike'''' F1,''''book5'''' F2
union
select ''''Mike'''' F1,''''book7'''' F2
union
select ''''Mike'''' F1,''''book9'''' F2

--插入数据

select id=identity(int,0,1),f1,f2 into #t from test



select a.f1,a.f2,a.id,cc ,N=
 case when (id>cc) then cast(id-cc-minn+1 as Char(10))
      when (id<=cc) then cast(id+1 as Char(10))
 end
into #Temp
from #t a,
(select f1,cc,minn  from
  (select  f1,count(*)as cc,min(id)-count(*) as minn from #t group by f1) t)b
where a.f1=b.f1


--构造两个临时表,由于要用到行号,所以必须要第一个临时表,第二个可以不用

select * from #Temp

--这个表笔原来的多一个字段,每个人的第n条记录

DECLARE @SQL VARCHAR(8000)
SET @SQL=''''SELECT f1  姓名''''
SELECT @SQL= @SQL+ '''',MIN(CASE WHEN N = '''''''''''' + N + '''''''''''' THEN F2 END) [F'''' + N + '''']'''' FROM (SELECT DISTINCT N FROM #Temp) A
SET @SQL=@SQL+'''' FROM #Temp GROUP BY F1''''
EXEC (@SQL)
 
--一条动态SQL语句

drop table #t
drop table #Temp
drop table Test


/*
jack       book1      1        
jack       book2      2        
jack       book3      3        
Mary       book4      1        
Mary       book5      2        
Mike       book1      1        
Mike       book5      2        
Mike       book7      3        
Mike       book9      4        
--------Temp表数据*/

/*
jack       book1      book2      book3      NULL
Mary       book4      book5      NULL NULL
Mike       book1      book5      book7      book9    

--------最终结果*/


 


[其他]手工升级ACCESS到SQLSERVER方法详解  [Web开发]asp+sqlserver 分页方法(不用存储过程)
[C语言系列]应用 SQLServer 链接服务器访问远程 Access 数据库  [C语言系列]如何在Jbuilder9中使用SQLServer JDBC驱动
[C语言系列]java与sqlserver2000的连接(最终版)!  [C语言系列]一个简单的jsp连接sqlserver数据库的小实例
[Web开发]ADO中sqlserver存储过程使用  [其他]Odbc连SQLServer数据库的几种方法
[其他]使用ADO连接到防火墙后的SQLServer  [SyBase]最近一段时间都在弄sybase和ms-sqlserver,写了一…
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台