各位大虾,请问:在SQL server 2008中,如何将从一个表中查询得到的一列值,全部转换为列名?
解决方案 »
- 在Student表的年龄列Sage上创建一个名称为AgeIdx的降序索引
- 在 MS SQL中分离出来的数据库在哪里找
- cast(ziduan as nvarchar) nvarchar默认存储几个字节?
- 关于表中“无法编辑该单元”的问题
- 关于 select count(*) 占用海量内存的问题 能解决,或是能说明原因的加100分
- SQL Server 2008 Express 连接不稳定
- SQL 怎么做随机填充值
- xpsq170.dll
- 求助,如何在sql server2005中实现对某个字段的查询结果,按相关性进行排序
- mssql查询提问
- 求一条更新表的sql语句,很有深度,谢谢大家捧场
- SQL SERVER 2005嵌套查询问题
http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html
假设在表a中查询列couId,并将列的每个值都做为另一个表b的新列名,代码怎么写?
--INSERT INTO test
--SELECT 1,'a'
--UNION ALL
--SELECT 2,'b'
--UNION ALL
--SELECT 3,'c'
--UNION ALL
--SELECT 4,'d'
--SELECT * FROM test
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([couId])+'=max(case when [couId]='+quotename(couId,'''')+' then [couId] else ''0'' end)'
from test group BY couId
SELECT @s=SUBSTRING(@s,2,LEN(@s))
exec('select '+@s+' from test')
/*
a b c d
---------- ---------- ---------- ----------
a b c d
(1 行受影响)
*/
----------------科目确定--------------
--创建测试数据
if OBJECT_ID('Test') is not null drop table Test
create table Test(name nvarchar(20),course nvarchar(20),score int)
go
insert into Test
select '张三','数学',80 union all
select '张三','数学',20 union all
select '张三','语文',78 union all
select '张三','英语',89 union all
select '李四','语文',85 union all
select '李四','数学',90 union all
select '王五','英语',88 --select * from Testselect * from Test
Pivot (
sum(score) FOR course IN
(数学,语文,英语))
as pvt/* 查询结果
(7 行受影响)
name 数学 语文 英语
-------------------- ----------- ----------- -----------
李四 90 85 NULL
王五 NULL NULL 88
张三 100 78 89(3 行受影响)
*/----------------科目固定不确定--------------
if OBJECT_ID('Test') is not null drop table Test
create table Test(name nvarchar(20),course nvarchar(20),score int)
go
insert into Test
select '张三','数学',80 union all
select '张三','数学',20 union all
select '张三','语文',78 union all
select '张三','英语',89 union all
select '李四','语文',85 union all
select '李四','数学',90 union all
select '王五','英语',88 union all
select '王五','科目一',88 union all
select '王五','科目二',77 union all
select '王五','科目三',66 union all
select '王五','科目四',55 union all
select '王五','科目五',44 union all
select '王五','科目六',33
declare @sql varchar(max),
@columns varchar(2000)
--拼接科目
select @columns=isnull(@columns+',','')+course from Test group by course
--拼接查询语句
set @sql='select * from Test
Pivot (
sum(score) FOR course IN
('+@columns+')) as pvt'
exec (@sql)
/*
name 科目二 科目六 科目三 科目四 科目五 科目一 数学 英语 语文
------ ------ ------ ------ ------ ------ ------ ------ ------ ------
李四 NULL NULL NULL NULL NULL NULL 90 NULL 85
王五 77 33 66 55 44 88 NULL 88 NULL
张三 NULL NULL NULL NULL NULL NULL 100 89 78
*/