问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql 行数据转换成多列

发布网友 发布时间:2022-04-07 18:05

我来回答

3个回答

懂视网 时间:2022-04-07 22:26

TABLE [成绩表]( [编号] [int]IDENTITY(1,1) NOT NULL, [姓名] [varchar](50)NULL, [语文] [numeric](5, 2)NULL, [数学] [numeric](5, 2)NULL, [英语] [numeric](5, 2)NULL ) ON [PRIMARY]

2、插入测试数据

INSERT INTO 成绩表([姓名],[语文],[数学],[英语])
VALUES(‘道一‘,80,100,90.8),(‘老二‘,48,56,60),(‘张三‘,88,78,90),(‘李四‘,80,90,95),(‘王五‘,67,68,56),(‘刘六‘,77,68,80)

3、执行语句进行行列转换

declare @sql_1 varchar(8000)
select @sql_1=‘‘
select @sql_1= @sql_1 + ‘select [编号],[姓名],[‘+name+‘] AS ‘‘成绩‘‘,‘‘‘+name+‘‘‘ AS ‘‘课程‘‘ from 成绩表 union all ‘
from syscolumns where id=object_id(‘成绩表‘) and CHARINDEX(name,‘编号,姓名‘)=0
select @sql_1= @sql_1 + ‘ select distinct null,null,null,null from 成绩表 ‘ 
--注意!多一行 selectdistinct null,null,null,null from 成绩表 不加会报union all错误
print @sql_1
declare @sql_2 varchar(8000)
select @sql_2=‘select [课程] ‘
select @sql_2=@sql_2 + ‘,SUM(case when [姓名] = ‘‘‘+[姓名]+‘‘‘ then 成绩 else 0 end) ‘‘‘+[姓名]+‘‘‘ ‘
from 成绩表
select @sql_2=@sql_2 + ‘ from ( ‘+@sql_1 +‘) as tb where ISNULL([编号],‘‘‘‘)<>‘‘‘‘ group by [课程]‘
print @sql_2
execute(@sql_2)

执行行列转换后的结果如图:

技术分享

4、继续添加一些数据

INSERT INTO 成绩表([姓名],[语文],[数学],[英语])
VALUES(‘鬼七‘,67,68,56),(‘王八‘,77,68,80)

5、继续执行步骤3的脚本,动态查询随表变化,结果如图:

技术分享

 

SQL多行转多列

标签:

热心网友 时间:2022-04-07 19:34

用存储过程和临时表实现吧,代码给你了
CREATE PROCEDURE [dbo].[sp_test]
AS
BEGIN
SET NOCOUNT ON;

DECLARE @A nvarchar(50)
DECLARE @B nvarchar(200)
DECLARE @Btmp nvarchar(200)

DECLARE @charindex int

CREATE TABLE #tem
(
colA nvarchar(50) NULL,
colB nvarchar(50) NULL,
)

DECLARE curRecord CURSOR FOR
SELECT cola,colb from testtable
OPEN curRecord

FETCH NEXT FROM curRecord INTO @A,@B

WHILE @@fetch_status=0
BEGIN
SELECT @charindex=charindex(',',@B),@Btmp=@B
while (@charindex)>0
begin
insert into #tem
select @A,substring(@Btmp,1,@charindex-1)

select @Btmp=substring(@Btmp,@charindex+1,len(@Btmp))
select @charindex=charindex(',',@Btmp)
end
FETCH NEXT FROM curRecord INTO @A,@B --将游标向下移1
END

CLOSE curRecord --关闭游标
DEALLOCATE curRecord

select * from #tem

DROP TABLE #tem

END

热心网友 时间:2022-04-07 20:52

转换完了列1就不是主键了呗?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 儿童发育畸形或患有先天性疾病 ,是受遗传因素的影响对吗? 精神病会不会遗传 下列关于遗传病的说法错误的是(  )A.遗传病是由遗传物质改变或致病基因控制的疾病,可以遗传给下一 &quot;遗传病是基因病,其他疾病跟基应无关&quot;是对√还是错×? 人类遗传病都是由于遗传物质改变引起的,并不都是先天性疾病不对吗 人类遗传病通常是指由于遗传物质改变而引起的疾病………对吗? 先天性疾病就是遗传病.___(判断对错 生物上人体遗传病都是由致病基因影起的对不对 对于宝宝的先天性疾病,都是父母给遗传的吗? 所有的精神病都会遗传吗?不管是什么因素引起的发病? 1964年农历5月20日是阳历几月几号? 所有先天性的病都会遗传吗? 求(1960-2009年)中国航天事业的发展历程? 为什么有些疾病是显性基因遗传的,有些是隐性的 求中国航天发展历程时间表 遗传病是先天性的 这句话对吗?如果后面有 疾病时 对吗 基因结构改变引发的疾病一定是遗传病对不对。若对请说明理由,若错请举出反例 新中国60年的辉煌成就 哪些疾病会遗传给下一代?有什么方法能预防吗? 6月29日发生了什么历史事件 驻港部队的前途? 请问驻港部队退役后有工作按吗? 驻港部队回来的士官能找什么样的工作呢 驻港部队退伍在广东好找工作吗? 我想知道驻港部队想要留队有什么条件吗?留队后退伍会安排工作吗? 军人退伍后能做什么工作 我想问当*好还是去驻港部队好,待遇又是怎样的,出来以后有没有什么事做,分别大吗? 本人是驻港部队退役的军人,侦察兵出身。今年21岁,身高175.体重145.想找份工作,希望能找到份好工作。 去驻香港部队当兵退役后能分着好点的工作吗?当两年必须退役吗?在那可以签合同兵吗?我是应届本科生。 驻港部队退伍的进! 退伍后能做哪些工作? 我是驻港部队的退役的义务兵,我是农村户口。想知道民政对我们有什么补助和安排? 驻港部队考军校出来之后能做些什么工作 闪成s8耳机怎么用??? 有谁知道驻港部队怎么样 好不好 2010年大专毕业的女兵去驻港部队服役两年过后想退伍假如有点关系能安排什么工作啊? S8R蓝牙耳机怎乡使用? 蓝牙耳机连接显示s8是什么意思 魅杰s8蓝牙耳机配对方法 参股单位月末确认投资收益吗