zoukankan      html  css  js  c++  java
  • 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 国外
    */
  • 相关阅读:
    IT人士必去的10个网站
    c++怎样让函数返回数组
    vs中“Stack around the variable was corrupted”的解决方案
    c++ eof()函数
    bat开发小工具以及使用
    Python接口自动化(一)---json数据类型取值
    MAVEN编译错误解决:maven only whitespace content allowed before start
    shell常用命令总结总结
    shell打包和解压
    java总结笔记
  • 原文地址:https://www.cnblogs.com/scottckt/p/864409.html
Copyright © 2011-2022 走看看