TSQL Challenge 1
在老外网站发布的一些SQL问题,拿过来自己搞一下,后面我也会陆续转载一些问题,欢迎看到的朋友贴出自己的答案,交流一哈。对于技术问答题的描述,翻译远不不原版来的更好一些,下面我就贴出原版的题目,欢迎参与
TSQL Challenge 1 - Pair-wise and ordered assignment of objects from two different lists
This challenge will be interesting for TSQL enthusiasts as well as bird lovers! It involves assigning food items to birds from two different baskets. Here is a ‘relational’ representation of birds, food items and baskets in the form of tables and rows.
Table Birds lists the birds which are the recipients of food items. The baskets containing the food items are the tables Grains and Fruits. Whenever possible, you must assign the food items in pairs and they must be taken from each table in alphabetical order. When one of the tables no longer has a food item for a bird you must output a null in the corresponding column and continue assigning food items from the other table until that one runs out of food baskets as well.
Sample Data
Birds Table
1.
Code Name
2.
---- -------
3.
1 Pigeon
4.
2 Sparrow
5.
3 Parrot
Grains Table
1.
Code Grain
2.
---- ------
3.
1 Wheat
4.
1 Rice
5.
2 Corn
6.
2 Millet
Fruits Table
1.
Code Fruit
2.
---- ------
3.
1 Banana
4.
1 Mango
5.
1 Guava
6.
2 Grapes
Expected Results
1.
Code Bird Grain Fruit
2.
---- ------- ------ ------
3.
1 Pigeon Rice Banana
4.
1 Pigeon Wheat Guava
5.
1 Pigeon NULL Mango
6.
2 Sparrow Corn Grapes
7.
2 Sparrow Millet NULL
8.
3 Parrot NULL NULL
Rules
- For a bird with no food basket at all, a single line should be output with the Grain and Fruit columns containing null.
- The output should be ordered by Code followed by the order in which the Grain/Fruit pairs were extracted from the Grains/Fruits tables.
Restrictions
- The solution should be a single query that starts with a "SELECT" or “;WITH”
下面是我自己的答案,欢迎补充:
- ;WITH cte AS
- (SELECT num=DENSE_RANK()OVER(PARTITION BY name ORDER BY GRain ASC ), * FROM TC1_BIRDS AS D OUTER APPLY (SELECT grain FROM TC1_GRAINS WHERE code=d.code ) AS ST)
- ,cte2 AS
- (SELECT num=DENSE_RANK()OVER(PARTITION BY name ORDER BY fruit ASC ), * FROM TC1_BIRDS AS D OUTER APPLY (SELECT fruit FROM TC1_FRUITS WHERE code=d.code ) AS ST)
- ,cte3 AS
- (
- SELECT num,code,NAME,fruit,grain FROM cte2 OUTER APPLY (SELECT grain FROM cte WHERE cte.num=cte2.num AND cte.CODE=CTE2.CODE ) AS ST
- UNION ALL
- SELECT num,code,NAME,fruit,grain FROM cte OUTER APPLY (SELECT fruit FROM cte2 WHERE cte.num=cte2.num AND CTE2.CODE=cte.CODE ) AS ST
- )
- SELECT DISTINCT num, code,NAME,grain,fruit FROM cte3 ORDER BY code, NAME
想了半天才凑出上面的答案,欢迎看到的朋友贴出自己的答案。
TSQL Challenge 1的更多相关文章
- TSQL Challenge 2
和之前发布的TSQL Challenge 1是同一系列的文章,看到那篇学习哪篇,没有固定的顺序,只为锻炼下思维. Compare rows in the same table and group th ...
- T-SQL Recipes之Separating elements
Separating elements Separating elements is a classic T-SQL challenge. It involves a table called Arr ...
- TSQL Beginners Challenge 3 - Find the Factorial
这是一个关于CTE的应用,这里我们用CTE实现阶乘 Factorial,首先来看一个简单的小实验,然后再来看题目.有的童鞋会问怎么没有2就来3了呢,惭愧,TSQL Beginners Challeng ...
- TSQL Beginners Challenge 1 - Find the second highest salary for each department
很久以前准备写的系列文章,后来因为懒一直耽搁着,今天突然决定继续下去,于是有了这篇文章,很基础,但很常用.题目描述依然拷贝.简单来说就是找出个个部门薪水排名第二的人,排名相同的要一起列出来. Intr ...
- T-SQL学习记录
T-sql是对SQL(structure query language )的升级.可以加函数. 系统数据库:master管理数据库.model模版数据库,msdb备份等操作需要用到的数据库,tempd ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- TSQL 分组集(Grouping Sets)
分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回 ...
- T-sql语句查询执行顺序
前言 数据库的查询执行,毋庸置疑是程序员必备技能之一,然而数据库查询执行的过程绚烂多彩,却是很少被人了解,今天哥哥要带你装逼带你飞,深入一下这sql查询的来龙去脉,为查询的性能优化处理打个基础,或许面 ...
随机推荐
- Unity 网络斗地主 牌的一些算法
Unity 网络斗地主 牌的一些算法 在这儿说一下,我的项目是用svn的方式,上传在https://v2.svnspot.com/18666451713.doudizhu这个svn上,大家可以下载T ...
- 浅谈RDD
RDD(Resilient Distributed Datasets)弹性分布式数据集,是在集群应用中分享数据的一种高效,通用,容错的抽象,是Spark提供的最重要的抽象的概念, 它是一种有容错机制 ...
- HDU 4717The Moving Points warmup2 1002题(三分)
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 【HDOJ】3309 Roll The Cube
BFS,考虑一球进洞仅一球滚动以及两球重叠的情况即可. /* 3309 */ #include <iostream> #include <queue> #include < ...
- OpenCV 2.4.3在VS2010上的应用
一.下载和安装: 1.OpenCV 2.4.3下载:http://www.opencv.org.cn/index.php/Download#Version_2.4.3 2.下载完成后,解压 ...
- BZOJ1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4 ...
- -_-#【CSS3】CSS3 gradient transition with background-position
CSS3 gradient transition with background-position <!DOCTYPE html> <html> <head> &l ...
- POJ 3189 Steady Cow Assignment
题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小. 题目输入: 首先是两个 ...
- 【转】轻量级文本编辑器,Notepad最佳替代品:Notepad++--不错
原文网址:http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/npp_function_column_mode.htm ...
- HDOJ 2016 数据的交换输出
Problem Description 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数. Input 输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测 ...