表结构如下
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 国外
*/
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 国外
*/