日期:2014-05-19  浏览次数:20480 次

在线等,请大家帮忙,数据查询的问题。
有这样一个表,表表的创建代码如下(结构也就下面这样的):
CREATE   TABLE   [dbo].[Info](
[ID]   [int]   IDENTITY(1,1)   NOT   NULL,
[Title]   [nvarchar](100)   COLLATE   Chinese_PRC_CI_AS   NULL,
[Content]   [nvarchar](max)   COLLATE   Chinese_PRC_CI_AS   NULL,
[Time]   [smalldatetime]   NULL,
[Pic]   [varchar](200)   COLLATE   Chinese_PRC_CI_AS   NULL,
[Auth]   [nvarchar](50)   COLLATE   Chinese_PRC_CI_AS   NULL   CONSTRAINT   [DF_Info_Auth]     DEFAULT   (N '管理员 '),
[Type]   [smallint]   NULL,
  CONSTRAINT   [PK_News]   PRIMARY   KEY   CLUSTERED  
(
[ID]   ASC
)WITH   (PAD_INDEX     =   OFF,   IGNORE_DUP_KEY   =   OFF)   ON   [PRIMARY]
)   ON   [PRIMARY]

目前使用select   *   from   Info查询的结果如下:
ID Title Content Time Pic Auth Type
----------------------
1 标题1 内容1 2007-07-22   16:04:00 null   管理员 91
2 标题2 内容2 2007-07-22   16:04:00 null   管理员 92
3 标题3 内容3 2007-07-22   16:04:00 null   管理员 93
4 标题4 内容4 2007-07-22   16:04:00 null   管理员 94
5 标题5 内容5 2007-07-22   16:04:00 null   管理员 95
6 标题6 内容6 2007-07-22   16:04:00 null   管理员 96

想得到如下的结果:
Content91 Content92 Content93 Content94 Content95 Content96
----------------------
内容1 内容2 内容3 内容4 内容5 内容6

注:列名为Content+原来的Type值


请帮忙,谢谢!

------解决方案--------------------
----创建测试数据
if object_id( 'tbTest ') is not null
drop table tbTest
GO
CREATE TABLE tbTest([ID] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[Content] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[Time] [smalldatetime] NULL,
[Pic] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[Auth] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Info_Auth] DEFAULT (N '管理员 '),
[Type] [smallint] NULL)
insert tbTest
select '标题1 ', '内容1 ', '2007-07-22 16:04:00 ',null, '管理员 ',91 union all
select '标题2 ', '内容2 ', '2007-07-22 16:04:00 ',null, '管理员 ',92 union all
select '标题3 ', '内容3 ', '2007-07-22 16:04:00 ',null, '管理员 ',93 union all
select '标题4 ', '内容4 ', '2007-07-22 16:04:00 ',null, '管理员 ',94 union all
select '标题5 ', '内容5 ', '2007-07-22 16:04:00 ',null, '管理员 ',95 union all
select '标题6 ', '内容6 ', '2007-07-22 16:04:00 ',null, '管理员 ',96

----查询
declare @sql varchar(8000)
set @sql = ' '
select @sql = @sql + ',Conten ' + rtrim(Type) + '=max(case Type when ' + rtrim(Type) + ' then Content end) '
from tbTest group by Type
set @sql = 'select ' + stuff(@sql,1,1, ' ') + ' from tbTest '
EXEC(@sql)

----清除测试环境
drop table tbTest

/*结果
Content91 Content92 Content93 Content94 Content95 Content96
--------------------------------------
内容1 内容2 内容3 内容4 内容5 内容6
*/