1、行、列转换

--行转列
create table 成绩(姓名 varchar(10),科目 varchar(10),分数 int)
insert into 成绩 values('张三','语文',74)
insert into 成绩 values('张三','数学',83)
insert into 成绩 values('张三','物理',93)
insert into 成绩 values('李四','语文',77)
insert into 成绩 values('李四','数学',84)
insert into 成绩 values('李四','物理',94)
insert into 成绩 values('王五','语文',81)
insert into 成绩 values('王五','数学',86)
insert into 成绩 values('王五','物理',91)
--方法1
select
姓名,
max(case 科目 when '语文' then 分数 else 0 end) as 语文,
max(case 科目 when '数学' then 分数 else 0 end) as 数学,
max(case 科目 when '物理' then 分数 else 0 end) as 物理
from 成绩 group by 姓名
--方法2(sql20005)
select*from 成绩 pivot(max(分数) for 科目 in (语文,数学,物理)) a --列转行
create table 成绩(姓名 varchar(10),语文 int,数学 int,物理 int)
insert into 成绩 values('张三',74,83,93)
insert into 成绩 values('李四',77,84,94)
insert into 成绩 values('王五',81,86,91)
--方法1
select 姓名,'语文' as 科目,语文 as 分数 from 成绩
union
select 姓名,'数学' as 科目,数学 as 分数 from 成绩
union
select 姓名,'物理' as 科目,物理 as 分数 from 成绩
--方法2
select 姓名,科目,分数 from 成绩 unpivot(分数 for 科目 in(语文,数学,物理)) t

2、分组排序

--(用上行转列的表,各科按成绩排名,sql2005)
select row_number() over(partition by 科目 order by 分数 desc) as 排名,姓名,科目,分数 from 成绩

3、递归查询
树形结构查找某个节点的上下级(sql2005)

create table 部门(id int,名称 varchar(30),上级id int)
go
insert into 部门 values(1,'总部',0)
insert into 部门 values(2,'研发部',1)
insert into 部门 values(3,'软件部',2)
insert into 部门 values(4,'企业软件部',3)
insert into 部门 values(5,'CRM开发部',4) go
with 下级部门 as
(
select*from 部门 where id=2
union all
select t1.* from 部门 t1 inner join 下级部门 t2 on t1.上级id=t2.id
)
select*from 下级部门
go
with 上级部门 as
(
select*from 部门 where id=4
union all
select t1.* from 部门 t1 inner join 上级部门 t2 on t1.id=t2.上级id
)
select*from 上级部门

4、多行拼接到一列
(在用户以及用户所属角色的列表)

create table 用户 (id int,名称 varchar(30))
go
create table 角色(id int,名称 varchar(30))
go
create table 用户_角色(用户id int,角色id int)
go
insert into 用户 values(1,'A')
insert into 用户 values(2,'B')
insert into 角色 values(1,'管理员')
insert into 角色 values(2,'主管')
insert into 用户_角色 values(1,1)
insert into 用户_角色 values(1,2)
insert into 用户_角色 values(2,2)
go select *,
stuff((select ','+名称 from 角色 a left join 用户_角色 b on a.id=b.角色id where b.用户id=u.id for xml path('')),1,1,'') as 角色
from 用户 u

几条sql语句的更多相关文章

  1. 一条Sql语句分组排序并且限制显示的数据条数

    如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...

  2. JavaWeb 学习009-4个页面,5条sql语句(添加、查看、修改、删除)

    ===========++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++==+++++++++ 2016-12-3------ ...

  3. JavaWeb 学习007-4个页面,5条sql语句(添加、查看、修改、删除)2016-12-2

    需要复习的知识: 关联查询 =================================================================================班级模块学 ...

  4. C#实现执行多条SQl语句,实现数据库事务

    C#实现执行多条SQl语句,实现数据库事务 在数据库中使用事务的好处,相信大家都有听过银行存款的交易作为事务的一个例子.事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的 ...

  5. 如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;)。

    1.如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;). 2.select查询的多个字段之间要用逗号“,”分割,如果查询涉及多个表,那多个表之 ...

  6. c#中执行多条sql语句【ORA-00911: 无效字符】

    问题描述: 在plsql里执行多条sql语句的时候,使用“,”(逗号)分隔,测试可以执行多条,而在C#执行多条sql语句的时候[ORA-00911: 无效字符]. 有时我们需要一次性执行多条sql语句 ...

  7. Spring 中jdbcTemplate 实现执行多条sql语句

    说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里 ...

  8. MyBatis一次执行多条SQL语句

    MyBatis一次执行多条SQL语句 有个常见的场景:删除用户的时候需要先删除用户的外键关联数据,否则会触发规则报错. 解决办法不外乎有三个:1.多条sql分批执行:2.存储过程或函数调用:3.sql ...

  9. 用一条SQL语句取出第 m 条到第 n 条记录的方法

    原文:用一条SQL语句取出第 m 条到第 n 条记录的方法   --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)       *    FROM Table     id ...

  10. 使用传入的总记录数实现一条sql语句完成分页查询

    使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...

随机推荐

  1. IOS开发-文件管理(二)

    IOS开发-文件管理(二) 五.Plist文件 String方式添加               NSString *path = [NSHomeDirectory( )  stringByAppen ...

  2. How I came to find Linux

    http://ianmurdock.com/post/how-i-came-to-find-linux/ lan murdock August 17, 2015 I saw my first Sun ...

  3. python学习笔记(递归函数)

    博主看了看递归.说的简单点就是程序里面再调用程序本身,或者是方法里面再调研方法本身.或者是函数里面再调研函数本身 用于什么场景呢,博主这里是父子节点排序,父子节点的查询 直接上代码: #!/usr/b ...

  4. Android开发-API指南-<service>

    <service> 英文原文:http://developer.android.com/guide/topics/manifest/service-element.html 采集(更新)日 ...

  5. 如何查看IIS并发连接数

    如果要想知道确切的当前网站IIS连接数的话,最有效的方法是通过windows自带的系统监视器来查看. 一.运行-->输入"perfmon.msc". 二.在"系统监 ...

  6. python中时间格式

    问题:通过MySQLdb查询datetime字段,然后通过浏览器显示出来,得到的格式是:         'Thu, 19 Feb 2009 16:00:07 GMT'   (http呈现出来的格式) ...

  7. mysql中case用法

    如上所述,使用case的子句将作为一个字段,方便起见,可以用别名表示.其中,when是case的条件,值为then的表达式值.   参考: http://www.owe-love.com/myspac ...

  8. 通过fileupload上传文件超出大小

    配置文件 . web.config中添加如下内容: <configuration> <system.web> <httpRuntime maxRequestLength= ...

  9. 【MySQL】MySQL回滚工具

    1.mysqlbinlog把事务从binlog中导出 2.从导出的binlog中找到要回滚的事务,去掉第一个DML语句前和最后一个DML语句后与DML无关的binlog信息 3.在目录中新建一个tab ...

  10. asp.net中导出Execl的方法

    一.asp.net中导出Execl的方法: 在 asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址 输出在浏览器上:一种是将文件直接将文件输出流写给 ...