sql行变列
Ⅰ 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