zoukankan      html  css  js  c++  java
  • 摘抄一些关于数据库查询最后一条记录的语句

    select * from table 
    where rownum<(select count(*)+1 from table) 
    minus 
    select * from table 
    where rownum<(select count(*) from table) 

    也可以简化为 
    select * from table 
    minus 
    select * from table 
    where rownum<(select count(*) from table) 
    效果是一样的 

    切记rownum是伪列 只能用< 

    顺便给你求第X行的通用SQL语句 
    select * from table where rownum<X+1 
    minus 
    select * from table where rownum<X

    SQL中intersect、union、minus和except 运算符

    (2009-06-08 00:00:00)

    1、intersect运算符
    intersect运算符通过只包括 TABLE1  TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL  INTERSECT 一起使用时 (intersect  all),不消除重复行。
    2、minus运算符
    minus运算符通过只包括 TABLE1  TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 allminus一起使用时 (minus all),不消除重复行。
    3、union运算符

    union运算符是将两个或更多查询的结果组合为单个结果集 


    table1:
    f_name 

    f_date
    name1   2009-6-1
    name2   2009-6-2

    table2:
    f_name  f_date
    name3   2009-6-2
    name4   2009-6-3

    select f_date from table1 intersect select date from table2
    结果:
    name2   2009-6-2


    select f_date from table1 union select f_date from table2
    结果:

    2009-6-1
    2009-6-2
    2009-6-3

    注:except
    只能用于SQLserver
    在SQLserver中:
    select f_date from table1 except select f_date from table2
    结果:
    2009-6-1
    在oracle中用minus:
    select f_date from table1 minus select f_date from table2
    结果:
    2009-6-1
     
     

    SQLServer 实现rownum 的功能

    今天想把最近做的项目的Oracle数据库换成SqlServer数据库,在转换的过程中出现一点问题,就是输出表的行号的时候出现了问题,在Oracle数据库中,可以直接通过它的rownum来完成,语句如下

    select rownum as num,t.occurrenceid,t.occurrencenum2,t.registerdate,b.occtype,t.AMOUNT,t.occresult,t.occtime,t.yr,t.zi,t.hao,t.step as step from occurrence t left join occ_type b on t.occtypeid = b.occtypeid where t.step<3 and t.Departmentid='101000' order by t.registerdate desc

    但是放到SqlServer2005中就会出错看,说是rownum有错误,最后才知道在SqlServer查询行号不是那样查的,是用SqlServer的row_number()来查询的

    select row_number() over(order by t.registerdate desc) as num,t.occurrenceid,t.occurrencenum2,t.registerdate,b.occtype,t.AMOUNT,t.occresult,t.occtime,t.yr,t.zi,t.hao,t.step as step from occurrence t left join occ_type b on t.occtypeid = b.occtypeid where t.step<3 and t.Departmentid='101000'

    解释:

    1 此方法把括号里的查询结果放到变量:temp 里面( 我也不确定是不是变量), 并用row_number() 函数进行一个行号跟踪, 再用over 函数进行一个列的排序规则( 是这必须的), 并指定列名为'rownum'

    2 紧接着在下面的语句可以对 'rownum' 进行一个指定行号的查询

    其实显示序号除了采用sql处理外,我们也可以在程序代码中实现,比如sql2000可能使用sql就不行了,那么怎么办呢,可以看看下面的例子:

     
          string sql = "select * from jh_job where jh_check = 1 order by jh_pdate desc";
            DataTable dt = LYDAO.SqlText.ExecuteDataset(sql).Tables[0];

            DataColumn dc = new DataColumn("num");
            dt.Columns.Add(dc);
            for (int i = 0; i < dt.Rows.Count; i++)
            {


                DataRow row = dt.NewRow();
                int j=i+1;
                if (i < 10)
                {
                  
                dt.Rows[i]["num"]= "0" + j;
                }
                else
                {
                   
                dt.Rows[i]["num"]=j;
                }
            }

     
     

    然后绑定dt,在页面中读出num即可..

  • 相关阅读:
    Python 集合
    Python sorted()
    CodeForces 508C Anya and Ghosts
    CodeForces 496B Secret Combination
    CodeForces 483B Friends and Presents
    CodeForces 490C Hacking Cypher
    CodeForces 483C Diverse Permutation
    CodeForces 478C Table Decorations
    CodeForces 454C Little Pony and Expected Maximum
    CodeForces 313C Ilya and Matrix
  • 原文地址:https://www.cnblogs.com/fsh1542115262/p/4140240.html
Copyright © 2011-2022 走看看