SQL題目收集

題 1:

表结构如下
MyTable:
ID      quantity
1        3.3333
2         4.2222
3         1.5555
4         9.8888
5 ………

要求用SQL语句生成如下查询
ID           quantity   quantity
1             3.3333     3.3333
2             4.2222     7.5555
3             1.5555     9.0000
4             9.8888     18.8888
5 ………
提示:2日累计日产=1日累计日产+2日累计日产
3日累计日产=2日累计日产+3日累计日产




答案:
select id,quantity,(select sum(quantity)from mytable where id <= t.id)  as  acount from mytable t

題 2:

表A:
字段: id(主键) list
1 国内
2 国外
3 国内
4 国外
5 国外
6 国内
7 国外
8 国内
9 国内
10 国内
11 国外
能不能现实成:
字段: id list
1 国内
3 国内
6 国内
2 国外
4 国外
5 国外
反正意思就上把国内和国外区分显示, 先显示国内的在显示国外的,
然后每页分别显示3个国内和国外的

-- 建立测试环境
create table tb(id 
int ,list varchar( 10 ))
insert tb(id,list)
select 
' 1 ' , ' 国内 '  union all
select 
' 2 ' , ' 国外 '  union all
select 
' 3 ' , ' 国内 '  union all
select 
' 4 ' , ' 国外 '  union all
select 
' 5 ' , ' 国外 '  union all
select 
' 6 ' , ' 国内 '  union all
select 
' 7 ' , ' 国外 '  union all
select 
' 8 ' , ' 国内 '  union all
select 
' 9 ' , ' 国内 '  union all
select 
' 10 ' , ' 国内 '  union all
select 
' 11 ' , ' 国外 '
go

-- 分页定义表
CREATE TABLE tb_Page(
list varchar(
10 ) PRIMARY KEY,  -- 类别名称,与tb表的list关联
Records 
int -- 每页显示的记录数
Orders 
int -- 在页中的显示顺序
INSERT tb_Page SELECT 
' 国内 ' , 3 , 1
UNION ALL SELECT 
' 国外 ' , 3 , 2

GO

-- 实现分页处理的存储过程
CREATE PROC p_PageView
@PageCurrent 
int = 1   -- 要显示的当前页码
AS
SET NOCOUNT ON
-- 得到每页的记录数
DECLARE @PageSize 
int
SELECT @PageSize
= SUM(Records) FROM tb_Page
IF ISNULL(@PageSize,
0 ) < 0  RETURN

-- 分页显示处理
SET @PageCurrent
= @PageCurrent * @PageSize
SET ROWCOUNT @PageCurrent
SELECT SID
= IDENTITY( int , 1 , 1 ),ID
INTO # FROM(
SELECT TOP 
100  PERCENT a.ID
FROM tb a
LEFT JOIN tb_Page b ON a.list
= b.list
ORDER BY CASE WHEN b.list IS NULL THEN 
1  ELSE  0  END, -- 分类没有定义的显示在最后
((SELECT COUNT(
* ) FROM tb
WHERE list
= a.list
AND (id
< a.id OR id = a.id AND id <= a.id)) - 1 )
/ b.Records,
b.Orders,a.ID )a
IF @PageCurrent
> @PageSize
BEGIN
SET @PageCurrent
= @PageCurrent - @PageSize
SET ROWCOUNT @PageCurrent
DELETE FROM #
END
SELECT a.
*  FROM tb a,# b
WHERE a.ID
= b.ID
ORDER BY b.SID
GO

-- 调用
EXEC p_PageView 
1
go
-- 删除测试环境
drop table tb ,tb_page
drop proc p_PageView
go

/* --测试结果
id list
----------- ----------
1 国内
3 国内
6 国内
2 国外
4 国外
5 国外
*/

你可能感兴趣的:(sql)