㈠ sql如何将查询结果横排显示
这只是一个合并语句就搞定了。
select floor,group_contact(roomid,"##") as roomid from tablename group by floor;
用二个##分隔如得到的结果是 1000##1001
如果直接用group_contact(roomid)则是以,号分隔 如1000,1001
输出时用字符串工具处理下就可以了。
㈡ 如何把sql的结果横向显示
如果你想将SQL查询的结果横向显示,你可以使用闭基模PIVOT操作符。PIVOT操作符允轿缓许你将行转换为列,从而使结果更易于阅读和分析。以下是锋笑一个示例查询:
SELECT *FROM (SELECT name, subject, scoreFROM grades) AS srcPIVOT (MAX(score)FOR subject IN ('math', 'english', 'history')) AS pvt
这将返回一个结果集,其中每个学生的姓名都是一行,每个科目的成绩都是一列。你可以根据需要修改查询以满足你的需求。
㈢ 如何在sql 将查找出来的数据变成横向显示
您好,很高兴为您解答。
看几个实例。
select
max(casenamewhen'课桌式'then[count]else0end)as课桌式,
max(casenamewhen'分组式'then[count]else0end)as分组式,
....
from
tb
createtabletest([name]varchar(10),[count]int)
go
inserttest
select'课桌式',100unionall
select'分组式',360unionall
select'剧院式',200unionall
select'董事会',150unionall
select'U型',100unionall
select'宴会型',150
select*fromtest
declare@sqlvarchar(max)
select@sql=isnull(@sql+',','')+'max(casewhen[name]='''+[name]+'''then[count]end)as'''+[name]+''''
from
(select[name]fromtestgroupby[name])t
print@sql
exec('select'+@sql+'fromtest')
droptabletest
/*
(6row(s)affected)
namecount
---------------------
课桌式100
分组式360
剧院式200
董事会150
U型100
宴会型悔帆150
(6row(s)affected)
U型董事会分组式剧院式课桌昌前袜式宴会型
------------------------------------------------------------------
100150360200100耐激150
(1row(s)affected)
*/
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~O(∩_∩)O~
㈣ sql中把查询结果从竖列转为横向
select a as A,max(case when b='a' then c end) as a,max(case when b='b' then c end) as b,max(case when b='c' then c end) as c,max(case when b='d' then c end) as d from a
㈤ sql中怎么让结果集横向显示
给你一个最长见的例子:普通行列转换
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
*/
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名
--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
---------------------------------
/*
问题:在上述结果的基础上加平均分,总分,得到如下结果:
姓名 语文 数学 物理 平均分 总分
---- ---- ---- ---- ------ ----
李四 74 84 94 84.00 252
张三 74 83 93 83.33 250
*/
--SQL SERVER 2000 静态SQL。
select 姓名 姓名,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理,
cast(avg(分数*1.0) as decimal(18,2)) 平均分,
sum(分数) 总分
from tb
group by 姓名
--SQL SERVER 2000 动态SQL。
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 静态SQL。
select m.* , n.平均分 , n.总分 from
(select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b) m,
(select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程
exec ('select m.* , n.平均分 , n.总分 from
(select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m ,
(select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名')
drop table tb
------------------
------------------
/*
问题:如果上述两表互相换一下:即表结构和数据为:
姓名 语文 数学 物理
张三 748393
李四 748494
想变成(得到如下结果):
姓名 课程 分数
---- ---- ----
李四 语文 74
李四 数学 84
李四 物理 94
张三 语文 74
张三 数学 83
张三 物理 93
--------------
*/
create table tb(姓名 varchar(10) , 语文 int , 数学 int , 物理 int)
insert into tb values('张三',74,83,93)
insert into tb values('李四',74,84,94)
go
--SQL SERVER 2000 静态SQL。
select * from
(
select 姓名 , 课程 = '语文' , 分数 = 语文 from tb
union all
select 姓名 , 课程 = '数学' , 分数 = 数学 from tb
union all
select 姓名 , 课程 = '物理' , 分数 = 物理 from tb
) t
order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end
--SQL SERVER 2000 动态SQL。
--调用系统表动态生态。
declare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [课程] = ' + quotename(Name , '''') + ' , [分数] = ' + quotename(Name) + ' from tb'
from syscolumns
where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列
order by colid asc
exec(@sql + ' order by 姓名 ')
--SQL SERVER 2005 动态SQL。
select 姓名 , 课程 , 分数 from tb unpivot (分数 for 课程 in([语文] , [数学] , [物理])) t
--SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。
--------------------
/*
问题:在上述的结果上加个平均分,总分,得到如下结果:
姓名 课程 分数
---- ------ ------
李四 语文 74.00
李四 数学 84.00
李四 物理 94.00
李四 平均分 84.00
李四 总分 252.00
张三 语文 74.00
张三 数学 83.00
张三 物理 93.00
张三 平均分 83.33
张三 总分 250.00
------------------
*/
select * from
(
select 姓名 as 姓名 , 课程 = '语文' , 分数 = 语文 from tb
union all
select 姓名 as 姓名 , 课程 = '数学' , 分数 = 数学 from tb
union all
select 姓名 as 姓名 , 课程 = '物理' , 分数 = 物理 from tb
union all
select 姓名 as 姓名 , 课程 = '平均分' , 分数 = cast((语文 + 数学 + 物理)*1.0/3 as decimal(18,2)) from tb
union all
select 姓名 as 姓名 , 课程 = '总分' , 分数 = 语文 + 数学 + 物理 from tb
) t
order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 when '平均分' then 4 when '总分' then 5 end
drop table tb
㈥ 急急急!!! SQL语句如何将竖排的记录变横排并且放置在同一单元格内,跪求大神指点,万分感谢!!!
selectname姓名,col1+''+col2+''+col3参保类型
from(
selectname,'失业保险'ascol1,'医疗保险'ascol2,'工伤保险'ascol3fromtable1
pivot(max(type)fortypein([失业保险],[医疗保险],[工伤保险]))
aspvt)tab
lz试一下,有问题再追问。
㈦ sql纵向数据变横向数据正负
.sql纵向数据变横向数据正负
SQL纵向数据变横向数据的正负取决于所使用的转换函数。一般来说,使用的转换函数会影响正肆氏桥负裂猛的结果。例如,使用PIVOT函数将纵向数据转换为横向数据时,结果可能是正值,也可能是核陪负值。
㈧ sql查询结果横向显示
简单啊,先用row_number 获取 No顺序,然后通过STUFF FOR XML PATH 获取顺序号转成字段
通过动态SQL利用PIVOT行列
㈨ SQL怎么实现查询出的结果横排显示
因记录数不定,记录改成字段数量就不定,没有确定字段数,无法作查询。因为查询语句必须要字段列表的。
所以,你的问题不如这样实现,字段名就不要重复了,字段内容横过来就行了。
这样:
DECLARE @CD VARCHAR(8000)
SET @CD=''
SELECT @CD=' '+C+' '+D FROM 表A
select C_D=@CD
结果是这样
C_D
1 2 3 4 5 6
㈩ SQL Server 竖向结果转换为横向
SELECT 姓名
,'数学'=MAX(CASE 课程 WHEN '数学' THEN 分数 ELSE 0 END)
,'语文'=MAX(CASE 课程 WHEN '语文' THEN 分数 ELSE 0 END)
,'英语'=MAX(CASE 课程 WHEN '英语' THEN 分数 ELSE 0 END)
FROM TB
GROUP BY 姓名
--或者
SELECT 姓名,
,'数学'=SUM(CASE 课程 WHEN '数学' THEN 分数 ELSE 0 END)
,'语文'=SUM(CASE 课程 WHEN '语文' THEN 分数 ELSE 0 END)
,'英语'=SUM(CASE 课程 WHEN '英语' THEN 分数 ELSE 0 END)
FROM TB
GROUP BY 姓名