一道SQL面试题
表结构如下
是一张递归格式的表

使用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面试题的更多相关文章
- 一道sql面试题(查询语句)
一道sql面试题(查询语句) id name age 1 a 11 2 b 11 3 c 12 4 d 13 5 e ...
- 汽车之家一道SQL 面试题,大家闲来无事都来敲一敲
写在前面 上周去汽车之家面试,拿到这个SQL笔试题顿时感觉到有些陌生,因为好长时间不写SQL语句了,当时只写了表设计,示例数据和SQL语句都没写出来. 汽车之家应该用的SQL Server, 编程题一 ...
- 一道SQL面试题——表行列数据转换(表转置)
SQL语句如下: select country, sum(case when type='A' then money end) as A, sum(case when type='B' then mo ...
- 一道SQL的面试题之联想
一道SQL的面试题之联想 本人工作在一家小型的民营企业,主要从事业务系统的日常维护,二次开发,菜鸟一枚.周五经理准备面试两个开发人员,据简历,都还比较不错,让经理产生了想法,于是准备了一套面试题目,给 ...
- sql经典试题
1.一道SQL语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2 ...
- 必会SQL笔试题
()表名:购物信息 购物人 商品名称 数量 A 甲 B 乙 C 丙 A 丁 B 丙 …… 给出所有购入商品为两种或两种以上的购物人记录 答:); ()表名:成绩表 姓名 课程 分数 张三 语文 张三 ...
- sql面试题一 学生成绩
sql面试题一 学生成绩 原帖链接:http://topic.csdn.net/u/20081020/15/1ABF54D0-F401-42AB-A75E-DF90027CEBA0.html 表架 ...
- 经典的SQL面试题
SQL中 inner join. left join .right join. outer join之间的区别 A表(a1,b1,c1) B表(a2,b2) a1 b1 c1 a2 b2 01 数学 ...
- 一道 JavaScript 面试题
有一道 JavaScript 面试题. f = function () { return true; }; g = function () { return false; }; (function() ...
- SQL面试题1
SQL面试题 Sql常用语法 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言 ...
随机推荐
- pdfz Vue-3-Cheat-Sheet-zh 官方要是能下载下来,我也就不放这里了。 VUE3 composition API cheat sheet
https://files.cnblogs.com/files/pengchenggang/Vue-3-Cheat-Sheet-zh.zip 官方下载地址:https://www.vuemastery ...
- ESP8266 下安装esptool.py并使用esptool刷机神助手
一 前记 在使用ESP8266模块时,通常会用到一些刷机软件.官方提供了nodemcu_flasher.ESPFlashDownloadTool.ESP8266Flasher等下载工具,但是缺少更底层 ...
- 什么叫运行时的Java程序?
Java程序的运行包含编写.编译和运行三个主要步骤. 1.在编写阶段: 开发人员在Java开发环境中输入程序代码,形成后缀名为.java的Java源文件. 2.在编译阶段: 使用Java编译器对源文件 ...
- RTMP、X264与交叉编译
RTMP.X264与交叉编译 与HTTP(超文本传输协议)同样是一个基于TCP的Real Time Messaging Protocol(实时消息传输协议).由Adobe Systems公司为Fl ...
- Kotlin 协程基础使用学习
原文: Kotlin 协程基础使用学习-Stars-One的杂货小窝 本篇阅读可能需要以下知识,否则可能阅读会有些困难 客户端开发基础(Android开发或JavaFx开发) Java多线程基础 ko ...
- .net core WPF关于进程打开网页链接报错"文件找不到"
System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = " ...
- 记一次查询优化,mybatis查询oracle卡,直接拿sql数据库查询很快
调整前 <select id="getList" resultMap="BaseResultMap" parameterType="java.u ...
- KingbaseES V8R6 运维案例 -- sys_filenode.map故障案例
案例说明: 数据库下的sys_filenode.map文件被破坏,导致此数据库无法连接访问. Nail表(内核系统表)Relfilenode的存储机制: 经过研究发现,在数据目录里存在着pg_fi ...
- Android Button 点击事件
Ctrl+Alt+Space(空格键) 可以显示提示内容
- 《2020年IT行业项目管理调查报告》重磅发布
近年来,IT行业迅速发展,物联网.敏捷.DevOps等已成为行业的热门话题.为更好地了解行业现状,禅道项目管理软件联合各合作伙伴于2021年1月开展了针对IT行业的问卷调查,并推出了<2020年 ...