当前位置:首页 » 编程语言 » sql行变列

sql行变列

发布时间: 2022-09-28 03:02:12

sql语句行转列 怎么转啊

--声明变量

declare@sqlvarchar(1000),@num_dataint,@num_allvarchar(2000),@num_numint,@table_sqlvarchar(2000)

set@num_num=0

--判断并创建表

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[records]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[dbo].[records]

createtablerecords(

[id]int,

[name]varchar(50),

[sex]varchar(10),

[num]int

)

--插入数据

insertintorecordsvalues(1,'tom','男',2)

insertintorecordsvalues(1,'tom','男',3)

insertintorecordsvalues(1,'tom','男',4)

insertintorecordsvalues(1,'tom','男',5)

--全选表中数据

select*fromrecords

--全选num列数据

selectnumas'数据'fromrecords

--释放游标

deallocateselect_num

--为‘selectnumfromrecords’建立游标

declareselect_numscrollcursorforselectnumas'shuju'fromrecords

--打开游标

openselect_num

--获得第一条数据

fetchnextfromselect_numinto@num_data

set@num_all=convert(varchar,@num_data)+','

set@num_num=@num_num+1;

--如果获取成功,继续获得数据

while@@fetch_status=0

begin

fetchnextfromselect_numinto@num_data

set@num_num=@num_num+1;

set@num_all=@num_all+convert(varchar,@num_data)+','

end

--关闭游标

closeselect_num

print@num_num

--set@num_num=@num_num-1;

declare@iint

set@i=1

print@num_num

print@i

set@table_sql='createtablenumall(idint,namevarchar(50),sexvarchar(10)'

print@table_sql

while@num_num>=1

begin

set@table_sql=@table_sql+',num'+convert(varchar,@i)+'int'

set@num_num=@num_num-1;

set@i=@i+1

end

set@table_sql=@table_sql+')'

print@table_sql

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[numall]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[dbo].[numall]

exec(@table_sql)

declare@insert_sqlvarchar(2000)

set@insert_sql='insertintonumallvalues(1,'+'''tom'','+'''男'''

print@insert_sql

openselect_num

--获得第一条数据

fetchnextfromselect_numinto@num_data

set@insert_sql=@insert_sql+','+convert(varchar,@num_data)

--如果获取成功,继续获得数据

while@@fetch_status=0

begin

fetchnextfromselect_numinto@num_data

set@insert_sql=@insert_sql+','+convert(varchar,@num_data)

end

set@insert_sql=@insert_sql+')'

print@insert_sql

exec(@insert_sql)

--insertintonumallvalues(1,'tom','男',2,3,4,5,5)

select*fromnumall

试试吧,数据虽然有点出入,但已经说明问题了!!!

Ⅱ sql表行到列的转换

鉴于你已经新建好下面的表了 被我称为tableB的表 前面的原始表称为tableA 那就开始吧
truncate table tableB ---清空tableB的数据先
insert into tableB
(StuCJID,XXBH,语文, 数学, 英语 ,政治)
select StuCJID,XXBH,Score,0,0,0
from tableA where KeCheng='语文' ---把A里面所有语文的记录都插入到B

update a set a.数学=b.Score from tableB a left join tableA b on a.XXBH=b.XXBH
where b.KeCheng='数学' ---对应更新B的数学和A同一个XXBH的人一致
update a set a.英语=b.Score from tableB a left join tableA b on a.XXBH=b.XXBH
where b.KeCheng='英语' ---对应更新B的英语和A同一个XXBH的人一致
update a set a.政治=b.Score from tableB a left join tableA b on a.XXBH=b.XXBH
where b.KeCheng='政治'---对应更新B的政治和A同一个XXBH的人一致

select * from tableB order by XXBH ---查询结果

Ⅲ sql 行变成列

看不懂。。
查询结果:
--------
帐号 人民币 美元 欧元
LZ 10000 10000 100000
我 20000 200000 200000

LZ要变成
帐号 LZ 我
人民币 10000 20000
美元 10000 200000
欧元 100000 200000

这样子?

Ⅳ sql怎样将行的值变为列,,,,

方法/步骤

  • 首先我们建立一张表,名为RToC,各个字段的设计如下图,分别是name,course,score,表示姓名,成绩与分数,如图所示。

  • 通过以上几个步骤,我们就可以轻松的实现行列转换了。同样,我们如果要把列转换成行, 应该怎么做呢?同样我们可以采用unpivot函数轻松实现。

Ⅳ 怎样实现sql行转列

--试一试。。。

createtable#test
(
姓名nvarchar(10),
学号nvarchar(10),
题号nvarchar(10),
答案nvarchar(10)
)
go
insertinto#test
select'张三','001','1','A'unionall
select'张三','001','2','C'unionall
select'李四','002','1','B'unionall
select'李四','002','2','D'

select*from#test

dECLARE@sqlVARCHAR(max)
SET@sql=''
SELECT@sql=@sql+',['+题号+']'FROM#testGROUPBY题号
SET@sql=STUFF(@sql,1,1,'')
SET@sql='select*from#testpivot(max(答案)for题号in('+@sql+'))a'
PRINT@sql
exec(@sql)

Ⅵ SQL中几种行变列的情况

有两种方式:

sql行列转换

1 case when

2 pivot 函数

请试一试,如有疑问,及时沟通!

Ⅶ sql行转列

SELECT e.NAME as name,
count(case when DATEPART(year,c.START_TIME)=2014 then 1 else null end ) as count2014,
count(case when DATEPART(year,c.START_TIME)=2015 then 1 else null end ) as count2015
from ENVI_DATA_STATISTIC_COMP c
LEFT JOIN ENVI_CITY e on e.CITY_ID=c.CITY_ID
where c.COMP_NAME like '%蓝天白云%' and INDEX_TYPE='12'
and (c.START_TIME like '%2014-08%' or c.START_TIME like '%2015-08%' ) and STATISTIC_TYPE='1' and c.VALID_FLAG='1'
group by name

应该是酱紫的,使用case when 转换~

Ⅷ sql 行变成列

declare@snvarchar(4000)
select@s=isnull(@s+',','')+quotename(Name)
fromsyscolumnswhereID=object_id('aa')
orderbyColid
exec('selectid,namefromaaunpivot(nameforidin('+@s+'))b')

如图:

Ⅸ sql 行转列

SELECT
*
FROM ( 你的SQL 放在这里面
) bb PIVOT( MAX(timePoint) FOR PName( [pm2.5], [nox], [.....] ) ) AS pvt

[pm2.5],这种你有一个要列一个。

Ⅹ SQL语句行转列

根据楼主的描述,特为楼主总结如下,在SqlServer里面行列转换的语法一般是: select 字段, sum(case when 要转换的行单元格的字段名='行字段内容' then 聚合的字段名 end ) as 自定义的列标题1 from 表的名字 group by 字段(注意,分组聚合就是根据这个字段来的,具体到楼主的问题,这里的字段就应该是org_id) 如果有多个列,之间用逗号隔开就可以了,最后一个参数和from之间不要用逗号。 具体到楼主的显示效果就可以这样写了。代码参考如下: Select org_id , sum(case when channel ='团险' then PREM end) As '团险保费' , sum(case when channel ='个险' then PREM end) As '个险保费 From 你的表名 Group By org_id

热点内容
ifconfiglinux 发布:2024-05-06 03:47:59 浏览:532
c语言开发集成环境 发布:2024-05-06 03:47:06 浏览:607
脚本uzi比赛视频 发布:2024-05-06 03:46:19 浏览:822
php给文本框赋值 发布:2024-05-06 03:21:24 浏览:26
androidjsonkey 发布:2024-05-06 03:07:31 浏览:732
python主线程子线程 发布:2024-05-06 03:07:20 浏览:764
android系统截屏 发布:2024-05-06 02:57:51 浏览:777
android居左 发布:2024-05-06 02:40:26 浏览:45
网页设置的密码如何删除 发布:2024-05-06 02:20:30 浏览:926
如何查看snmp配置信息 发布:2024-05-06 02:19:48 浏览:489