表结构如下

是一张递归格式的表

使用SQL转换成如下格式

SQL实现

使用SQL转换成上图的格式

SQL代码:

WITH T_Recur
AS
(
SELECT Id,1 num, cast(name as nvarchar(512)) as src
, name as l1, cast('' as nvarchar(16)) l2, cast('' as nvarchar(16)) l3, cast('' as nvarchar(16)) l4
, cast('' as nvarchar(16)) l5, cast('' as nvarchar(16)) l6, cast('' as nvarchar(16)) l7
FROM [TestDB].[dbo].[Recursion] WHERE Pid is NULL
UNION all
SELECT r.Id, t.num+1 num,cast(t.src+r.Name as nvarchar(512)) as src
,t.l1
,CASE WHEN t.num=1 THEN r.name
when t.num>1 Then t.l2
ELSE cast('' as nvarchar(16)) END
,CASE WHEN t.num=2 THEN r.name
when t.num>2 Then t.l3
ELSE cast('' as nvarchar(16)) END
,CASE WHEN t.num=3 THEN r.name
when t.num>3 Then t.l4
ELSE cast('' as nvarchar(16)) END
,CASE WHEN t.num=4 THEN r.name
when t.num>4 Then t.l5
ELSE cast('' as nvarchar(16)) END
,CASE WHEN t.num=5 THEN r.name
when t.num>5 Then t.l6
ELSE cast('' as nvarchar(16)) END
,CASE WHEN t.num=6 THEN r.name
when t.num>6 Then t.l7
ELSE cast('' as nvarchar(16)) END
from [TestDB].[dbo].[Recursion] r JOIN T_Recur t on r.PId=t.Id
) select l1 '一级部门', l2 '二级部门', l3 '三级部门', l4 '四级部门', l5 '五级部门', l6 '六级部门', l7 '七级部门'
from T_Recur -- 多送三个部门

结束

我觉得挺离谱的,这是线上的笔试,离开笔试界面会有警告,我就没用开发工具写,相当于是手写SQL了。

我当时没写出来,好久没用case,都用错了。当时case的判断我是用的==,正确写法是单等号=。我当时就随便写了一段case代码和递归SQL,然后说明了一下实现思路用case+cte实现。

一道SQL面试题的更多相关文章

  1. 一道sql面试题(查询语句)

    一道sql面试题(查询语句)   id name age 1  a        11 2  b        11 3  c        12 4  d        13 5  e        ...

  2. 汽车之家一道SQL 面试题,大家闲来无事都来敲一敲

    写在前面 上周去汽车之家面试,拿到这个SQL笔试题顿时感觉到有些陌生,因为好长时间不写SQL语句了,当时只写了表设计,示例数据和SQL语句都没写出来. 汽车之家应该用的SQL Server, 编程题一 ...

  3. 一道SQL面试题——表行列数据转换(表转置)

    SQL语句如下: select country, sum(case when type='A' then money end) as A, sum(case when type='B' then mo ...

  4. 一道SQL的面试题之联想

    一道SQL的面试题之联想 本人工作在一家小型的民营企业,主要从事业务系统的日常维护,二次开发,菜鸟一枚.周五经理准备面试两个开发人员,据简历,都还比较不错,让经理产生了想法,于是准备了一套面试题目,给 ...

  5. sql经典试题

    1.一道SQL语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2 ...

  6. 必会SQL笔试题

    ()表名:购物信息 购物人 商品名称 数量 A 甲 B 乙 C 丙 A 丁 B 丙 …… 给出所有购入商品为两种或两种以上的购物人记录 答:); ()表名:成绩表 姓名 课程 分数 张三 语文 张三 ...

  7. sql面试题一 学生成绩

    sql面试题一 学生成绩   原帖链接:http://topic.csdn.net/u/20081020/15/1ABF54D0-F401-42AB-A75E-DF90027CEBA0.html 表架 ...

  8. 经典的SQL面试题

    SQL中 inner join. left join .right join. outer join之间的区别 A表(a1,b1,c1) B表(a2,b2) a1 b1 c1 a2 b2 01 数学 ...

  9. 一道 JavaScript 面试题

    有一道 JavaScript 面试题. f = function () { return true; }; g = function () { return false; }; (function() ...

  10. SQL面试题1

    SQL面试题 Sql常用语法 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言 ...

随机推荐

  1. base-table 加入动态slot 流程 vue2

    columns { title: '字段标题', slot: 'yourSlotName', minWidth: 50, align: 'center' }, 组件内 props: { columns ...

  2. nginx四层和七层负载的配置

    四层负载和七层负载是两种不同类型的负载均衡策略,它们分别在网络的不同层次上工作.在Nginx中,这两种负载均衡策略可以通过配置nginx.conf文件来实现. 四层负载(L4 Load Balanci ...

  3. Java递归实现全排列改进(二)---利用ArrayList实现去重

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Test{  priv ...

  4. display标签交替显示不同行颜色

    问题 想要一个更加简单的支持列表数据分页和排序的方法. 解决方案 使用Display标签库和JSP标签库. 例4.13介绍了一个JSP页,它使用4.5节中的数据模型显示美国总统列表.这个JSP页面使用 ...

  5. 使用zxing来生成二维码

    使用zxing来生成二维码 二维码已经成为了现代生活中不可或缺的一部分,无论是商业还是个人使用,二维码都有着广泛的应用.而在二维码的生成过程中,zxing是一款非常优秀的开源库,它提供了一系列的API ...

  6. springboot如何优雅的获取前端参数

    写在前面 对于初学者来说,困难的不是理论知识,而是如何在程序中具体实现. 现在的项目基本上都是前后端分离的项目,如何打通前后端,接收前端传过来的参数呢? 废话不多说,这篇文章就来说一说接收前端参数的具 ...

  7. Spring Boot学习日记17

    尝试整合JDBC spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/mybati ...

  8. multisim的操作回顾

    multisim的操作回顾 1.写在前面 multisim的仿真功能还是强大的,能够有效地实现对电路功能的验证.但是,不能全局搜索器件是个大问题.对于不熟悉器件的基本分类的人来说,一排的分类足以浪费大 ...

  9. java基础 韩顺平老师的 面向对象(高级) 自己记的部分笔记

    373,类变量引出 代码就提到了问题分析里的3点 package com.hspedu.static_; public class ChildGame { public static void mai ...

  10. GWD:基于高斯Wasserstein距离的旋转目标检测 | ICML 2021

      论文详细描述了当前旋转目标检测的主要问题,提出将旋转回归目标定义为高斯分布,使用Wasserstein距离度量高斯分布间的距离用于训练.目前,常规目标检测也有很多将回归转化为概率分布函数的做法,本 ...