SQL把查询出的一个列转换成行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL把查询出的一个列转换成行相关的知识,希望对你有一定的参考价值。
参考技术A if not object_id('Class') is nulldrop table Class
Go
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
Go
declare @s nvarchar(4000)
select @s=isnull(@s+',','')+quotename(Name)
from syscolumns where ID=object_id('Class') and Name not in('Student')
order by Colid
exec('select Student,[Course],[Score] from Class unpivot ([Score] for [Course] in('+@s+'))b')
go
select
Student,[Course],[Score]
from
Class
unpivot
([Score] for [Course] in([数学],[物理],[英语],[语文]))b 参考技术B 2005版本以下用循环可以实现
2005版本以上可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表本回答被提问者采纳
sql 行变成列
如何把 select 1,2,3,4。。。。 筛选的结果变成
列头A
1
2
3
4
即查询的一行结果变成一列
select @s=isnull(@s+',','')+quotename(Name)
from syscolumns where ID=object_id('aa')
order by Colid
exec('select id,name from aa unpivot (name for id in('+@s+'))b')
如图:
参考技术B 楼主 声明一个变量 把列传给变量即可 行转列 有专门的函数的下面是课程表 有列课程和分数
你参考这个例子 就可以了
declare @sql varchar(8000)=‘’
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')本回答被提问者和网友采纳 参考技术C SELECT mgr,
deptno,
MAX(decode(empno, '7788', ename, NULL)) "7788",
MAX(decode(empno, '7902', ename, NULL)) "7902",
MAX(decode(empno, '7844', ename, NULL)) "7844",
MAX(decode(empno, '7521', ename, NULL)) "7521",
MAX(decode(empno, '7900', ename, NULL)) "7900",
MAX(decode(empno, '7499', ename, NULL)) "7499",
MAX(decode(empno, '7654', ename, NULL)) "7654"
FROM emp
WHERE mgr IN (7566, 7698)
AND deptno IN (20, 30)
GROUP BY mgr, deptno
ORDER BY 1, 2;
你可以参考一下!追问
我只有一行数据,没有是想group by 的基础
追答没看懂!
追问请教个问题,表A的列有数据1,2,3,4 我传入一组变量数据(1,2,3,4,5),如何查询出5 不在表A中呢?
追答判断table1中是否存在name字段
if exists(select * from syscolumns where id=object_id('table1') and name='name') begin
select * from people;
end
union all
select 2 from ..
union all
select 3 from ..
...
...
;追问
谢谢你的回答
但是我有无数列的,这个方法不可取
你这是列转行,
行转列用case when实现, 列转行就是用union all
难道你横着写就不用列举出来吗
请教个问题,表A的列有数据1,2,3,4 我传入一组变量数据(1,2,3,4,5),如何查询出5 不在表A中呢?
第5个回答 2013-09-17 什么的sqlserver?以上是关于SQL把查询出的一个列转换成行的主要内容,如果未能解决你的问题,请参考以下文章