sql 行变成列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 行变成列相关的知识,希望对你有一定的参考价值。

如何把 select 1,2,3,4。。。。 筛选的结果变成
列头A
1
2
3
4
即查询的一行结果变成一列

参考技术A declare @s nvarchar(4000)
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

参考技术D select 1 from ..
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 行变成列的主要内容,如果未能解决你的问题,请参考以下文章

sql语句怎么把列变成行

SQL语句行转列

用一条查询语句将列变成行 Sqlserver

sql语句列转行

SQL一行多列数据分解成多行数据

SQL 行列转换