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查询的来龙去脉,为查询的性能优化处理打个基础,或许面 ...
随机推荐
- List of XML and HTML character entity references
A character entity reference refers to the content of a named entity. An entity declaration is creat ...
- lpad rpad
Lpad()函数的用法:lpad函数将左边的字符串填充一些特定的字符其语法格式如下: lpad(string,n,[pad_string]) string:可是字符或者参数 ...
- C++ Primer 随笔 Chapter 2 变量和基本类型
2.1C++内置类型 C++ 算术类型 类型 含义 最小存储空间(随机器不同而不同) bool 布尔型 --- char 字符型 8位 wchar_t 宽字符型 16位 short 短整型 16位 i ...
- 部署lvs-rrd监控LVS
1.安装rrdtool .tar.gz cd rrdtool- ./configure -prefix=/usr/local/rrdtool make make instal 安装完毕后将rrdtoo ...
- 高级数据结构(树状数组套主席树):ZOJ 2112 Dynamic Rankings
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- flex与C# Socket通信
原文地址:http://blog.csdn.net/LX10752p/archive/2011/04/27/6366526.aspx Socket 通信没什么好说,一个服务端,多个客户端,很容易搭建环 ...
- loadrunner11有效的license
下载安装deletelicense.exe先1)退出程序,把下载文件中的lm70.dll和mlr5lprg.dll覆盖掉..\HP\LoadRunner\bin下的这两个文件 2)注意,win7的话一 ...
- SANSA 上上洛可可 贾伟作品 高山流水 香炉 香插香台香具 高端商务礼品 黑色【正品 价格 图片 折扣 评论】_尚品网ShangPin.com
SANSA 上上洛可可 贾伟作品 高山流水 香炉 香插香台香具 高端商务礼品 黑色[正品 价格 图片 折扣 评论]_尚品网ShangPin.com
- 使用jquery trigger 触发a标签的click事件取代window.open方法
var ohtml='<div class="friend-dialog tac pt15 pb20">'+ '<div class="f-h32&qu ...
- python-类和对象(属性、方法)的动态绑定
动态绑定 # coding=utf-8 ''' 当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性 ''' from types im ...