select * from table_name group by 序号

解决方案 »

  1.   

    我再做一个居民信息管理系统,以“户“为单位,要实现在报表中把一户中人都显示在一起。用asp+oracle编写
      

  2.   

    select decode(rank1,1,field1,''),field2 from (
      select field1,field2 , rank() over (partition by field1 order by field2) rank1
      from tablename) t1field1是你要的第一列字段。
    field2是你要的第二列字段。
      

  3.   

    iwantsay(吵闹)的语句很好,佩服!
      

  4.   

    iwantsay(吵闹)的语句 depends on data warehouse environment.Indeed the issue is not suitable to implement completely by SQL, any application has the presentation layer where it can deal with blank display easily after second raw per group(just a suggestion).
      

  5.   

    不需要data warehouse environment吧。rank相当于给出次序号,
    即按照partition指定的列分组,
    并按照order by 指定的列排序后的结果给出名次(顺序号)。不指定partition by就按全部记录排序。类似的函数有DenseRank,Row_Number。rank和DenseRank的区别是
    rank对于相同值给出相同的排名,
    DenseRank则给出不同的排名。
    Row_Number只是给出行号。三个函数用起来差不多,只不过在排序字段可能像同时,要考虑选用
    Rank还是DenseRank。一般都用在既要考虑分组,又需要处理详细数据的时候使用。
    很好用的。:)
      

  6.   

    iwantsay(吵闹) :
    能否给个关于此类函数的一些文档或说明或例子,
    最好是中文的,谢谢
      

  7.   

    行值  row_number   RANK 函数的结果         DENSERANK 函数的结果  
    100    1              1                              1  
    35     2              2                              2  
    23     3              3                              3  
    8      4              4                              4  
    8      5              4                              5  
    6      6              6                              6 我这里也没有中文帮助。
    你可以看看Oracle的文档。
      

  8.   

    看看这个应该有帮助的
    排列函数排列(ranking)函数。这些排列函数提供了定义一个集合(使用 PARTITION 子句),然后根据某种排序方式对这个集合内的元素进行排列的能力。例如,假设我们有一个雇员表,现在要对每个部门内的雇员薪水进行排列。要实现这一点,我们需要一个函数调用,这个函数调用可以完成以下工作: 将分区(集合)定义为各个部门 。 
    将集合内的排序方式定义为按薪水排序。 按照惯例,我们一般会将薪水高的排在前面,所以我们将指定一个对薪水的降序排序方式。下面的例子展示了这个查询的查询和输出。 select empnum, dept, salary, 
     rank() over (partition by dept 
           order by salary desc nulls last) as rank, 
     dense_rank() over (partition by dept order by salary desc nulls last)as denserank, 
     row_number() over (partition by dept order by salary desc nulls last)as rownumber 
    from emptab; EMPNUM  DEPT SALARY  RANK  DENSERANK   ROWNUMBER 
     ------  ---- ------  ----  ---------   --------- 
     6       1    78000   1     1           1 
     2       1    75000   2     2           2 
     7       1    75000   2     2           3 
     11      1    53000   4     3           4 
     5       1    52000   5     4           5 
     1       1    50000   6     5           6 
    -------------------------------------------------- 
     9       2    51000   1     1           1 
     4       2       -    2     2           2 
      
    展示排序的例子  首先,让我们看一下函数调用。注意,rank 函数本身没有参数。这是因为 rank 函数不对任何参数执行任何计算。相反,rank 函数只是着眼于行集合--以及每一行在集合中的位置--正如排序方式所定义的那样。那么,我们如何为这个函数定义集合和排序方式呢?两者都是用 OVER 子句定义的。在这个例子中,因为我们要在每个部门内进行排列,因此我们通过按部门划分分区来定义集合。这样做的效果是可以确保只有那些在 dept 列具有相等值的行才参与排列。对排列函数的而言,分区(partition) 和 集合(set) 这两个术语是等价的。在 PARTITION 子句后面,我们有一个 ORDER BY 子句,这个子句定义了分区内的排序方式。在这里,我们想将高薪排在前面,因此我们将排序方式定义为降序。除了指定降序以外,我们还指定 NULLS LAST。在 SQL 中,空值排在前面,意即空值显得要大于所有其他非空的值。这就给排列带来了问题,因为我们可能并不想将为空的薪水排在前面。因此,我们使用 NULLS LAST 子句来更改默认的排序方式,这样就可以将空值排在后面了。(注意,NULLS LAST 子句是在 DB2 V7 中引入的;不过,在 V6 中使用一个 CASE 表达式来强加排序方式也是可以的。)现在,让我们看一下输出。前 6 行都是 Department 1 的雇员,每一行都被赋予一个按薪水降序排列所得的名次。注意,在 Department 1 中,有两个雇员的薪水都是 75000,这两行都被赋予第二的名次。这是因为 rank 函数提供了一种 “奥林匹克式”的排列方式,在这种方式中,两个相等的值得到相等的名次。因为有两行“结在一起,同获第二”,所以就没有排在第 3 的行。相反,接下来的一行排在第 4,因为根据排序方式,有 3 行严格地排在这一行之前。对于 Department 2,注意其中有一个行具有为空的薪水。因为我们指定了 NULLS LAST,所以这一行被排在非空行的后面。如果我们没有指定 NULLS LAST 的话,Department 2 中两行的排列顺序就要倒过来了。到现在,您可能会问自己,在上面的例子中,其他两个输出列 denserank 和 rownumber 是什么呢?DB2 实际上有三个不同的排列函数。首先是 rank 函数,它提供了奥林匹克式的排列方式,这在前面已经描述过了。其他两个函数分别是 dense_rank 和 row_number。Dense_rank 很像 rank,在这个函数中,“结”中的行排名是相等的。这两个函数惟一的不同之处在于对跟在结后面的值的处理方式,在 Dense_rank 函数中排名是按 1 递增的(而不是像 rank 函数那样按结中行的数量来递增)。因而,这里不会出现排名有间隔的现象(因此函数名中才用了“dense”)。虽然 Employee 11 的薪水在 rank 函数中获得的名次是第 4,但是 denserank 函数返回的值是 3。最后一列给出 row_number 函数的输出。Row_number 也执行一次排列,但是当碰到有结的情况时,结中的行要进行任意的(也就是说,不是确定的)排序。这在对有重复值的数据进行分析时很有用。row_number 函数一个有趣的方面是它是惟一不要求提供排序方式的排列函数。如果在没有指定排序方式的情况下调用 row_number 函数,则所有的行都将被当作结中的行来对待,因而这些行是任意排序的。这对于在输出中给行排序来说很有用。
      

  9.   

    对iwantsay(吵闹)进一步修改:
    select decode(rm,1,field1,null),field2 from (
      select field1,field2 , row_number() over (partition by field1 order by field2) rm  from tablename)
    防止有多个相同field2