当前位置:首页 » 编程语言 » sql行专列逗号
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql行专列逗号

发布时间: 2022-07-26 12:27:09

Ⅰ mysql中列转行,并多个字段转到一行中的一个字段上,中间用逗号分开

select ID,group_concat(NAME) as NAME from table group by ID;
select ID,group_concat(NAME SEPARATOR ';') as NAME from a group by ID;

Ⅱ 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语句将一列多行数据拼接逗号隔开形成一条记录

mysql中,有标准函数,group_concat(name),直接返回连接好的字符串,并以逗号分割,如果记录比较多,超过函数返回值的最大值,可以调整mysql启动参数,增加显示值的长度。

Ⅳ 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

Ⅳ 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行列转换

--测试环境MSSQL2008
--先创建一个表值函数,负责字符串拆分
CreateFunction[dbo].[f_split1](@SourceSqlVarchar(8000),@StrSeprateVarchar(2))
Returns@tempTable(idIntIdentity(1,1),colVarchar(100))
As
begin
Declare@chasVarchar(100)
Set@SourceSql=@SourceSql+@StrSeprate
While(@SourceSql<>'')
Begin
Set@ch=left(@SourceSql,Charindex(@StrSeprate,@SourceSql,1)-1)
Insert@temp(col)Values(@ch)
Set@SourceSql=Stuff(@SourceSql,1,Charindex(@StrSeprate,@SourceSql,1),'')
End
Return
End
go

--建表
createtable#table(namenvarchar(500),valuenvarchar(max))

--插入数据
insertinto#tablevalues('aaa','45,44,44,44,43,43,43,43,43,43')
insertinto#tablevalues('bbb','45,44,44,44,44,44,44,44,44,43')
insertinto#tablevalues('ccc','13,12,12,12,4')

--由于N不固定,下面就动态生成SQL
Declare@Iint
Declare@WVarchar(1000)=''
Declare@SVarchar(4000)=''
Declare@SqlVarchar(8000)=''
select@I=max(len(value)-len(replace(value,',','')))from#table
While@I>0
Begin
Set@W=',['+Convert(Varchar(10),@I)+']'+@W
Set@S=',['+Convert(Varchar(10),@I)+']AsTop'+Convert(Varchar(10),@I)+@S
Set@I=@I-1
End
Set@Sql='
selectname'+@S+'from#table
outerapplydbo.f_split1(value,'','')
pivot
(
max(col)
For
idin('+stuff(@W,1,1,'')+')
)p
orderbyname'

--执行
Exec(@sql)


Ⅶ 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 server 行转列

创建测试表

createtabletest
(_keyvarchar(10),
_valuevarchar(10),
idint)

insertintotestvalues('ceshi','测试值',10)
insertintotestvalues('ceshi','测试值',11)
insertintotestvalues('ceshi2','测试值2',11)

执行

declare@sqlvarchar(4000)
set@sql='selectid'
select@sql=@sql+',max(case_keywhen'''+[_key]+'''then[_value]end)as
['+_key+']'
from(selectdistinct_keyfromtest)asa
select@sql=@sql+'fromtestgroupbyid'
exec(@sql)

结果


额,我那个第三条数据id写错了,不过方法还是这个