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即可..

  • 相关阅读:
    1061 Dating (20 分)
    1042 Shuffling Machine (20 分)简单模拟
    1132 Cut Integer (20 分)
    1100 Mars Numbers (20 分)
    1077 Kuchiguse (20 分)求字符串最长相同后缀
    1065 A+B and C (64bit) (20 分)大数 溢出
    1107 Social Clusters (30 分)并查集
    1079 Total Sales of Supply Chain (25 分)
    1078 Hashing (25 分)
    1063 Set Similarity (25 分)
  • 原文地址:https://www.cnblogs.com/fsh1542115262/p/4140240.html
Copyright © 2011-2022 走看看