王小明 email
王小明 address
张亮 tel
张亮 email
张亮 address
我的表是这样的。我怎么办才能合并成这样的
王小明 tel, email, address
张亮 tel, email,address
然后用DATAGRID显示给用户看呢?
这是我看完了你的问题写的结果
--如果表已经存在,删除表
if exists (select * from sysobjects where id = OBJECT_ID('[Score]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [Score]
--创建一个表
CREATE TABLE [Score] ( [Name] [varchar] (10) NULL , [Subject] [varchar] (10) NULL , [Score] [int] NULL )
--向表中加入数据
INSERT [Score] ( [Name] , [Subject] , [Score] ) VALUES ( '张三' , '语文' , 80 )
INSERT [Score] ( [Name] , [Subject] , [Score] ) VALUES ( '张三' , '数学' , 90 )
INSERT [Score] ( [Name] , [Subject] , [Score] ) VALUES ( '张三' , '物理' , 85 )
INSERT [Score] ( [Name] , [Subject] , [Score] ) VALUES ( '李四' , '语文' , 85 )
INSERT [Score] ( [Name] , [Subject] , [Score] ) VALUES ( '李四' , '数学' , 92 )
INSERT [Score] ( [Name] , [Subject] , [Score] ) VALUES ( '李四' , '物理' , 82 )
--查看原表中的数据
select * from Score
--创建一个临时表,用于存放临时数据
Create Table #Score (姓名 Varchar(10),语文 int ,数学 int,物理 int)
--向表中插入姓名数据
insert into #Score(姓名) Select Distinct Name from Score
--更新语文数据
update #Score set #Score.语文=(select Score From Score where Score.Name=#score.姓名 and Score.Subject='语文')
--更新数学数据
update #Score set #Score.数学=(select Score From Score where Score.Name=#score.姓名 and Score.Subject='数学')
--更新物理数据
update #Score set #Score.物理=(select Score From Score where Score.Name=#score.姓名 and Score.Subject='物理')
--显示所得到的结果
Select * From #Score
--删除临时表
Drop Table #Score
你看一下是否符合你的要求,如果想要得到更好的结果,那就要用游标了,你先好好看一下吧.
1. 行列转换--普通
假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82
我想做成这样的效果。不知道怎么弄,谢谢!
可以参考班主以前发的经典SQL
http://bbs.bc-cn.net/bbs/dispbbs.asp?boardID=24&ID=15174&page=7