关于sql的纵横查询,其实说白了就是pivot(行转列)、unpivot(列转行)、字符拼接、for xml path。
网上写关于这方面的东西太少,大多都是把他们分开写的,所以我给大家汇个总
给大家来几个例子,应该能弄明白吧!
首先创建个表插几条数据吧
<span style="font-size:14px;">create table dbo.test(id int ,name nvarchar(20) ,score int)
insert  into kktest.dbo.testselect  1 ,'张三' ,60unionselect  1 ,'李四' ,65unionselect  1 ,'王麻子' ,70unionselect  1 ,'大麻子' ,75</span>
select * from test
id name score
1  大麻子 75
1  李四     65
1  王麻子 70
1  张三     60
pivot
<span style="font-size:14px;">select  *
from dbo.test pivot
(sum([score]) for [name]in([张三],[李四],[王麻子],[大麻子])
)as s</span>

结果:

id  张三  李四  王麻子  大麻子
1  60      65      70         75
这里简单的说下这个函数吧,后面的别名还是一定要的,在pivot中的列一般养成个好习惯加[],对于
int类型的列来说,执行会报这列无效的错误,因为是行转列,所以,除你做对象的列其他的列如果不能
聚合,那么查询出来的列中没有数据的地方会用null填充。
unpivot
首先来个错误的
<span style="font-size:14px;">SELECT * FROM dbo.test
unpivot (值 for 列 in([id],[name],[score])) as s
where name = '王麻子'</span>

结果:

列 "name" 的类型与 UNPIVOT 列表中指定的其他列的类型冲突
所以说要转的类型必须是要是同类型!
再来个正确的别打脸
<span style="font-size:14px;">SELECT * FROM dbo.test
unpivot (值 for 列 in([id],[score])) as s
where name = '王麻子'</span>

结果:

name 值 列
王麻子 1 id
王麻子 70 score
这里只查一行就是为了图个对比。。。
然后就是行拼接,差不多就是:"***"+"***"
国际惯例,先来个错的:
<span style="font-size:14px;">select id+name+score
from dbo.test</span>

结果:

在将 nvarchar 值 '大麻子' 转换成数据类型 int 时失败。
新手应该能够理解吧!
再来个:
<span style="font-size:14px;">select cast(id as nvarchar(50))+name+cast(score as nvarchar(50))  as 合并
from dbo.test</span>

结果:

合并
1大麻子75
1李四65
1王麻子70
1张三60
这里呢为什么要转成nvarchar类型?因为字符拼接要转成字符你打我我报警
不服来个int不转字符直接拼:
<span style="font-size:14px;">select id+score
from dbo.test</span>

结果:

(无列名)
76
66
71
61
结果是相加的
for xml path
这里来两种方式吧,结果都是为了把列拼起来
<span style="font-size:14px;">select stuff(( select  ',' + ( isnull(name, '') )from    test
for     xml path('') ),1,1,'') as xml拼</span>

结果:

xml拼
大麻子,李四,王麻子,张三
<span style="font-size:14px;">select id, name=stuff((select ','+name
from kktest.dbo.test as b where a.id=b.id for xml path('')),1,1,'')
from kktest.dbo.test as a
group by a.id</span>

结果:

id name
1 大麻子,李四,王麻子,张三
这里就是把表转成xml格式,至于为什么要用isnull就是如果有一行是null那么整个串都是null。
行列的玩法有很多种!大家自己摸索吧

SQL SERVER中的纵横查询相关推荐

  1. SQL Server中T-SQL语句查询使用的函数

    SQL Server中T-SQL语句查询使用的函数 一,字符串函数 字符串函数用于对字符串数据进行处理,并返回一个字符串或数字. 函数名 描述 举例 CHARINDEX 用来寻找一个指定的字符串在另一 ...

  2. SQL server中的SELECT查询语句执行顺序

    各位大牛们好第一次写博客有点小激动!以后我会把自己的心得分享给大家,求各种评论 SQL server 中SELSECT查询语句的执行顺序如下: (8) SELECT   (9) DISTINCT (1 ...

  3. SQL Server中的连接查询

    单表查询中的GROUP BY子句 求各课程相应选课人数 select Cno,COUNT(Sno) from SC GROUP BY Cno; 带有HAVING短语指定筛选条件的查询 select S ...

  4. 浅谈SQL Server中统计对于查询的影响

    简介 SQL Server查询分析器是基于开销的.通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引.而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值 ...

  5. SQL Server中的模糊查询

    查看全文 http://www.taodudu.cc/news/show-5862580.html 相关文章: SQL SERVER精品视频教程 运维教程之Microsoft SQL server 2 ...

  6. SQL Server中的分页查询

    分页查询很简单,具体代码如下: --分页查询--查询1-3行数据 select top 3 * from emp order by sal desc;--查询4-6行数据 select top 3 * ...

  7. 在SQL Server中为什么不建议使用Not In子查询

    原文:在SQL Server中为什么不建议使用Not In子查询 在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来 ...

  8. SQL Server中的执行引擎入门

    简介 当查询优化器(Query Optimizer)将T-SQL语句解析后并从执行计划中选择最低消耗的执行计划后,具体的执行就会交由执行引擎(Execution Engine)来进行执行.本文旨在分类 ...

  9. sql server和mysql分页查询_sql server和mysql中分别实现分页功能

    MySQL 在MySQL中,可以用 Limit 来查询第 m 列到第 n 列的记录, 例如: select * from tablename limit m, n sql="select * ...

最新文章

  1. 微软称使用 Edge 而非 Chrome 能提升电池续航
  2. react router 路由守卫_react实现hash路由
  3. 独立硬盘冗余阵列与HDFS
  4. 1771: 书架整理(dp)
  5. SQL经典面试题及答案
  6. C++数组指针不能自增1/自减1
  7. mysql负责均衡读写分离_MySQL读写分离之负载均衡
  8. Ubuntu(Deepin)搭建Android开发环境(Android Studio)
  9. The Top 8 Security and Risk Trends We’re Watching
  10. 3年后,基于mysql控制vsftp的用户认证机制
  11. [转]虚方法(virtual)和抽象方法(abstract)的区别
  12. Freemarker商品详情页静态化服务调用处理
  13. 服务器Raid数据恢复,磁盘阵列数据恢复,raid 5数据恢复算法原理
  14. Linux下文件、文件夹大小排序及文件内容排序
  15. 【华为OD机试真题 JAVA】数字涂色
  16. 【黑客编程】手把手教你编写POC
  17. Windows官方纯净系统镜像下载及相关介绍
  18. 利用tcp三次握手,使用awl伪装MAC地址进行多线程SYN Flood
  19. 2021年中国集成电路市场现状及封测行业重点企业对比分析:通富微电vs华天科技vs长电科技
  20. 2022-2028全球与中国绿色氢基微电网市场现状及未来发展趋势

热门文章

  1. 【README】二叉树刷题框架
  2. 6-5-3:STL之stack和queue——优先级队列-priority_queue(堆)的基本使用和模拟实现以及仿函数
  3. Qt之系统托盘(QSystemTrayIcon详解)
  4. http请求头中Origin的作用及危害
  5. JS 原型对象(prototype)
  6. CentOS7 正确安装mysql(亲测)
  7. linux 可执行文件去除绝对路径
  8. matlab实现三次样条插值
  9. ES6-Generator使用与改写
  10. 初学总结--------Java修饰符与修饰关键字(且叫修饰关键字)