T-SQL练习题
转自:http://www.cnblogs.com/jenrrychen/p/5348546.html
1 - 3 题:
数据表结构:
OrderID ProductID OrderDate SaleAmount
1 1 2015-01-01 100
2 6 2015-02-01 900
3 1 2015-11-01 100
....
1. 找出2015年整年中销量最好(订单量最多)的3款产品。如果有多种方法实现更佳。
结果:
ProductID SaleQuantity
....
2. 找出2015年12个月中每个月销售总额最高的3个产品(如果存在相同的销售总额就一齐输出,例如第4名和第5名的销售总额恰好与第3名相同,同样输出)。如果有多种方法实现更佳。
结果:
SaleMonth ProductID SaleAmount
2015-01 X 11111
2015-02 Y 11111
3. 对每个产品在每一年内的按季度进行一个连续的销售额累加。如果有多种方法实现更佳。
4. 2015年全年销售总额最高的5款产品的每张订单在其订单时间过去一年内最高的销售额。如果有多种方法实现更佳。
5. 拼接结果集
;WITH T1 AS (
SELECT 'A' AS Col1
UNION
SELECT 'B' AS Col1
),
T2 AS (
SELECT 'C' AS Col1
UNION
SELECT 'D' AS Col1
UNION
SELECT 'E' AS Col1
UNION
SELECT 'F' AS Col1
),
T3 AS (
SELECT 'G' AS Col1
)
把这三个结果集拼接成:
T1_Col1 T2_Col1 T3_Col1
A C G
B D NULL
NULL E NULL
NULL F NULL
6. 合并字符串
表:tblOrder
OrderID CustomerID
1 1
2 1
3 1
4 2
5 3
6 2
7 4
8 4
....
按CustomerID为单位,把每个Customer的OrderID用逗号(,)合并在一起成为一个字符串,结果如下:
CustomerID OrderIDs
1 1,2,3
2 4,6
3 5
4 7,8
....
如果有多种方法实现更佳。
7. 寻找缺失数据区间。如果有多种方法实现更佳。
数据:
InvNo
1
2
3
6
8
9
19
结果:
StartNo EndNo
4 5
7 7
10 18
8. 构造数据
数据:
Date Value
2015-01-01 1
2015-01-03 2
2015-01-05 3
2015-01-07 4
2015-01-08 5
构造上面数据的N个副本,每个数据副本的最小日期(字段Date)为上一个副本的最晚日期加1天,字段Value保持和上一个副本一样。假设N为3,最终数据如下:
2015-01-01 1
2015-01-03 2
2015-01-05 3
2015-01-07 4
2015-01-08 5
2015-01-09 1
2015-01-11 2
2015-01-13 3
2015-01-15 4
2015-01-16 5
2015-01-17 1
2015-01-19 2
2015-01-21 3
2015-01-23 4
2015-01-24 5
9. 编写T-SQL产生下列数据
结果:
1
1
2
3
5
8
13
21
34
....
2584
10. 水池注水法/水柱灌水法
假设有5个圆柱体容器,每个圆柱体容器中有不同数量的球体,现在有N个球体可以填入这5个圆柱体容器中,需要按照灌水的方式先填充球体最少的圆柱体,再依次递增。比如:
圆柱体1: O
圆柱体2: OOOO
圆柱体3: OOOOOOO
圆柱体4: OOOOOOOOOO
圆柱体5: OOOOOOOOOOOO
O代表了圆柱体中的球体,现在手头上有12个新的球体,需要对圆柱体1->圆柱体2->圆柱体3(由少至多)分配球体,要均匀分配。
用T-SQL计算出每个圆柱体里面大概可以分配到多少份额的球体。