zoukankan      html  css  js  c++  java
  • SQL sever 外连接行转列

    1、建表插数据查询(需要对case有一定了解)

     1 create table A 
     2 (
     3 s varchar(20),
     4 b varchar(20)
     5 )
     6 
     7 insert into a values('赤井','SQL入门')
     8 insert into a values('赤井','UNIX基础')
     9 insert into a values('铃木','SQL入门')
    10 insert into a values('工藤','SQL入门')
    11 insert into a values('工藤','Java中级')
    12 insert into a values('吉田','UNIX基础')
    13 insert into a values('渡边','SQL入门')
    14 
    15 select s 名字,b 课程 from a

    2、查询结果如下

    名字 课程
    赤井
    SQL入门
    赤井
    UNIX基础
    铃木
    SQL入门
    工藤
    SQL入门
    工藤
    Java中级
    吉田
    UNIX基础
    渡边
    SQL入门

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    3、外连接行转列无脑写法1

     1 select distinct a0.s 名字,
     2 case when a1.b is not null  then '' else null end SQL入门,
     3 case when a2.b is not null  then '' else null end UNIX基础,
     4 case when a3.b is not null  then '' else null end Java中级
     5  from a a0
     6 left  join 
     7 (select * from a where b='SQL入门') a1
     8 on a0.s=a1.s left join 
     9 (select * from a where b='UNIX基础') a2
    10 on a0.s=a2.s left join 
    11 (select * from a where b='Java中级') a3
    12 on a0.s=a3.s

    4、外连接行转列无脑写法2

    1 select a0.s 名字,
    2 (select '' from a where b='SQL入门' and a0.s=a.s)  as  SQL入门,
    3 (select '' from a where b='UNIX基础' and a0.s=a.s)  as  UNIX基础,
    4 (select '' from a where b='Java中级' and a0.s=a.s)  as Java中级
    5  from (select distinct s from a) a0

    5、灵活一点的写法,使用聚合对单表行转列(不使用group by会返回所有行数)

    1  select s 姓名,
    2 case when sum(case when b='SQL入门' then 1 else null end)=1 then '' else null end as  SQL入门,
    3 case when sum(case when b='UNIX基础' then 1 else null end)=1 then '' else null end as  UNIX基础,
    4 case when sum(case when b='Java中级' then 1 else null end)=1 then '' else null end as  Java中级
    5   from a 
    6  group by s

     查询出的结果都如下表

    姓名 SQL入门 UNIX基础 Java中级
    赤井 ○  ○  NULL
    渡边 ○  NULL NULL
    工藤  ○  NULL
    吉田 NULL ○  NULL
    铃木 ○  NULL NULL

     

     

     

     

     

     

  • 相关阅读:
    C# 6.0 新特征 Demo
    SmartGit 试用过期
    .net版Git Server --- bonobo
    线程操作若干(复习)
    异步的两种写法: async 与 BeginInvoke
    winform 防止主界面卡死
    wcf 出现 IsContentTypeSupported 错误
    NodeJs 实时压缩 项目js文件
    Excel 公式(细节若干)
    itextSharp 对pdf的每个页面添加footer/header
  • 原文地址:https://www.cnblogs.com/BKY88888888/p/14326314.html
Copyright © 2011-2022 走看看