推荐;适合SQL初学者学习的SQL FAQ集锦

1 2 下一页  1. 行列转换--普通
  
假设有张学生成绩表(CJ)如下:



   
    Name  Subject   Result
张三  语文    80
张三  数学    90
张三  物理    85
李四  语文    85

李四  数学    92
李四  物理    82
  
想变成

姓名  语文  数学  物理
张三  80   90   85
李四  85   92   82
 
 


  


   
    declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql  ',sum(case Subject when ''' Subject '''
then Result end) [' Subject ']'
from (select distinct Subject from CJ) as a
select @sql = @sql ' from test group by name'
exec(@sql)
 
 



2. 行列转换--合并



   
    有表A,
id pid
1  1
1  2
1  3
2  1
2  2
3  1
如何化成表B:
id pid
  1  1,2,3
  2  1,2
  3  1
 
 




创建一个合并的函数




   
    create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str='
select @str=@str ',' cast(pid as varchar) from 表A where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go
 
 




--调用自定义函数得到结果



   
    select distinct id,dbo.fmerg(id) from 表A

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [SQL] 的这些文章也感兴趣:

SQL语言快速入门之一
SQL循序渐进(2)表的基础知识
SQL7.0储存过程调试
海量数据库的查询优化及分页算法方案
新的NHibernate社区站点上线
网络SQL入侵与防范高级篇
SQL循序渐进(18)索引
Entity SQL Language 一 简介
SQL Prompt 3.8,SQL Refator 的发布,破解和下载
有孔就入 SQL Injection的深入探讨