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

    1、先建立一个员工子女表B

     1 create table B(
     2 YG VARCHAR(20),  --员工名
     3 BB1 VARCHAR(20),  --孩子1
     4 BB2 VARCHAR(20),  --孩子2
     5 BB3 VARCHAR(20)   --孩子3
     6 )
     7 
     8 
     9 INSERT INTO B VALUES
    10 ('赤井','一郎','二郎','三郎'),
    11 ('工藤','春子','夏子',''),
    12 ('铃木','夏子','',''),
    13 ('吉田','','','')

    2、查询结果如下

    YG  BB1 BB2 BB3
    赤井 一郎  二郎  三郎
    工藤 春子 夏子   
    铃木 夏子     
    吉田      

    3、通过 union all

    1 SELECT yg,BB1 as bb FROM B
    2 union all
    3 SELECT yg,BB2 as bb FROM B
    4 union all 
    5 SELECT yg,BB3 as bb FROM B

       union all会将为空的列也查询出来,如果加上不为空的条件(<>'',因为插数据不是null所以用<>''),

    就能查出所有有子女的员工及子女名,反之查询所有没小孩员工

    4、有无子女员工全部查询,为了简化查询,创建视图查询所有小孩名去重非空

    1 create view st(bb)
    2 as select bb1 from B where bb1 <>''
    3 union
    4 select BB2 from B where bb2 <>''
    5 union
    6 select bb3 from B where bb3 <>''

    5、然后用左连接left ,这样B表员工全部展现,子女没有就会为null展示

    1 select b1.yg,st.bb from B b1 
    2 left join st 
    3 on st.bb in (b1.BB1,b1.bb2,b1.bb3) group by  b1.yg,st.bb 

    查询结果如下

    yg  bb
    赤井 二郎
    赤井 三郎
    赤井 一郎
    工藤 春子
    工藤 夏子
    吉田 NULL
    铃木 夏子

    6、或者觉得NULL难看可以自定义NULL值

    1 select b1.yg,
    2 case when st.bb is null then '单身贵族' else st.bb end 列名 from B b1 
    3 left join st 
    4 on st.bb in (b1.BB1,b1.bb2,b1.bb3) group by  b1.yg,st.bb 
  • 相关阅读:
    hdu 4947
    hdu 4946
    hdu 4944
    hdu 4942
    hdu 4941
    PAT 【L2-011 玩转二叉树】
    PAT【L2-006 树的遍历】
    XYNUOJ 【2070: 重建二叉树】
    XYNUOJ 【1367: 二叉链表存储的二叉树】
    XYNUOJ 2390【二叉树遍历2】
  • 原文地址:https://www.cnblogs.com/BKY88888888/p/14330994.html
Copyright © 2011-2022 走看看