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. Android WebView Long Press长按保存图片到手机

    <span style="font-size:18px;">首先要先注册长按监听菜单 private String imgurl = ""; /** ...

  2. [原创]大连sap vt 实习生面试经历

    从决定参加这次面试开始,求职生涯就算是开始了,虽然失败了,但也是亲身体会到了面试的感觉,这次经历也作为第一篇博客. 大连sap的职能是sap的全球技术支持中心和解决方案提供中心.VT项目提供的岗位是技 ...

  3. Mistral 工作流组件之一 概述

    Mistral的前世今生:  Mistral是Mirantis公司为Openstack开发的工作流组件,提供Workflow As a Service.典型的应用场景包括任务计划服务Cloud Cro ...

  4. redis错误总结

    1.同步错误.不停重试一直不成功 Full resync from master: e51165e2868c541e28134a287f9bfe36372bae34:80575961684 MASTE ...

  5. 学习练习 java练习小题题目:判断一个整数能被几个9整除

    题目:判断一个整数能被几个9整除 package com.hanqi.lianxi; import java.io.*; public class Test1 { //判断能否被9整除 static ...

  6. 学习练习 java 小题

    Scanner a = new Scanner(System.in); System.out.println("请输入您的分数"); int fen = a.nextInt(); ...

  7. HTML5--》details

    <details>是HTML5的新标签,用于描述文档或文档某个部分的细节. 目前只有 Chrome 和 Safari 6 支持 <details> 标签. 与 <summ ...

  8. ostack

  9. 查询数据库后台Block 的Sql存储过程

    查询数据库后台Block 的Sql存储过程 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO /*记录SQL Server的阻塞情况 wang 200 ...

  10. 复杂的sql 一对多查询

    SELECT distinct       u.Name as UserName,       a.OrderId,       (       select  d.SignCity from T_O ...