sql server中将一列中的数据改为每条数据为一列

Wtcwtc0828 2018-07-09 06:26:15
请教老师们一个sql server中的问题,
原始表如图一所示:两列,姓名和科目,

想在数据库中将原始表变为下表的样式,将科目列中的数据改为单独一列,有该科目则为1,没有则为0
...全文
220 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_30430447 2019-06-28
  • 打赏
  • 举报
回复
您好,如果我的数据不是固定的要如何将结果存储到一个表里?就是我科目会再添加,无法固定多少种科目的这种可以做到吗
二月十六 2018-07-10
  • 打赏
  • 举报
回复
引用 5 楼 Wtcwtc0828 的回复:
[quote=引用 3 楼 sinat_28984567 的回复:]
前边加一个insert into 表名试试
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select 姓名'
SELECT @sql = @sql + ',max(case 科目 when ''' + 科目
+ ''' then 1 else 0 end)[' + 科目 + ']'
FROM ( SELECT DISTINCT
科目
FROM #T
) a
SET @sql = @sql
+ ' from #T group by 姓名'
EXEC('insert into 表名 '+@sql)




您好,如果我我要对结果中的列名做个排序,从第一列开始到最后一列的按照大小排序,这样是不是可以利用order by 来实现?[/quote]
读取的时候在order by就行了,存储的时候order by没意义
Wtcwtc0828 2018-07-10
  • 打赏
  • 举报
回复
引用 4 楼 yenange 的回复:
[quote=引用 2 楼 Wtcwtc0828 的回复:]
您好,请问下要将上述结果导入新建的表格中这个怎么做呢?
新建的表格中列名就是(姓名,科学,美术,体育,音乐)这几列

insert into 表名(姓名,科学,美术,体育,音乐)
EXEC (@sql)[/quote]


您好,如果我要对姓名,科学,美术,体育,音乐,这几个列按照大小来设为第一列第二列等等,这个是怎么实现?
Wtcwtc0828 2018-07-10
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
前边加一个insert into 表名试试
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select 姓名'
SELECT @sql = @sql + ',max(case 科目 when ''' + 科目
+ ''' then 1 else 0 end)[' + 科目 + ']'
FROM ( SELECT DISTINCT
科目
FROM #T
) a
SET @sql = @sql
+ ' from #T group by 姓名'
EXEC('insert into 表名 '+@sql)




您好,如果我我要对结果中的列名做个排序,从第一列开始到最后一列的按照大小排序,这样是不是可以利用order by 来实现?
吉普赛的歌 2018-07-10
  • 打赏
  • 举报
回复
引用 2 楼 Wtcwtc0828 的回复:
您好,请问下要将上述结果导入新建的表格中这个怎么做呢?
新建的表格中列名就是(姓名,科学,美术,体育,音乐)这几列

insert into 表名(姓名,科学,美术,体育,音乐)
EXEC (@sql)
二月十六 2018-07-10
  • 打赏
  • 举报
回复
前边加一个insert into 表名试试
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select 姓名'
SELECT @sql = @sql + ',max(case 科目 when ''' + 科目
+ ''' then 1 else 0 end)[' + 科目 + ']'
FROM ( SELECT DISTINCT
科目
FROM #T
) a
SET @sql = @sql
+ ' from #T group by 姓名'
EXEC('insert into 表名 '+@sql)
Wtcwtc0828 2018-07-10
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([姓名] nvarchar(21),[科目] nvarchar(22))
Insert #T
select N'甲',N'美术' union all
select N'乙',N'音乐' union all
select N'丙',N'体育' union all
select N'丁',N'科学' union all
select N'甲',N'音乐' union all
select N'丙',N'科学' union all
select N'乙',N'体育'
Go
--测试数据结束

DECLARE @sql VARCHAR(MAX)
SET @sql = 'select 姓名'
SELECT @sql = @sql + ',max(case 科目 when ''' + 科目
+ ''' then 1 else 0 end)[' + 科目 + ']'
FROM ( SELECT DISTINCT
科目
FROM #T
) a
SET @sql = @sql
+ ' from #T group by 姓名'
EXEC(@sql)





您好,请问下要将上述结果导入新建的表格中这个怎么做呢?
新建的表格中列名就是(姓名,科学,美术,体育,音乐)这几列





二月十六 2018-07-09
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([姓名] nvarchar(21),[科目] nvarchar(22))
Insert #T
select N'甲',N'美术' union all
select N'乙',N'音乐' union all
select N'丙',N'体育' union all
select N'丁',N'科学' union all
select N'甲',N'音乐' union all
select N'丙',N'科学' union all
select N'乙',N'体育'
Go
--测试数据结束

DECLARE @sql VARCHAR(MAX)
SET @sql = 'select 姓名'
SELECT @sql = @sql + ',max(case 科目 when ''' + 科目
+ ''' then 1 else 0 end)[' + 科目 + ']'
FROM ( SELECT DISTINCT
科目
FROM #T
) a
SET @sql = @sql
+ ' from #T group by 姓名'
EXEC(@sql)


22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧