在线等,请大家帮忙,数据查询的问题。
有这样一个表,表表的创建代码如下(结构也就下面这样的):
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
*/