• 几条sql语句


    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
    View Code

    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 上级部门
    View Code

    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
  • 相关阅读:
    selenium + python 环境配置 (三)之启动chrome
    selenium + python 环境配置 (二)之启动IE
    selenium + python 环境配置 (一)
    知源图四点坐标和目标图四点坐标,求透视变换矩阵
    memset()初始化为1的那些事
    NSOJ 4621 posters (离散化+线段树)
    申请到新博客了好开心
    SpringCloud之Hystrix-Dashboard监控,以及踩的坑...
    SpringBoot中在除Controller层 使用Validation的方式
    Docker安装ElasticSearch 以及使用LogStash实现索引库和数据库同步
  • 原文地址:https://www.cnblogs.com/zengyy/p/3358222.html
Copyright © 2020-2023  润新知