T-SQL练习题

转自:http://www.cnblogs.com/jenrrychen/p/5348546.html

https://www.runoob.com/sql/sql-tutorial.html
https://www.jianshu.com/p/476b52ee4f1b
https://wenku.baidu.com/view/6570a4275901020207409cbc.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计算出每个圆柱体里面大概可以分配到多少份额的球体。

原文地址:https://www.cnblogs.com/gered/p/9004268.html