1

我有一张这样的桌子

+------+------+------+------+
| col1 | col2 | col3 | rank |
+------+------+------+------+
|    1 | A    | X    |    4 |
|    2 | C    | Y    |    3 |
|    2 | C    | Y    |    3 |
|      | A    | X    |    3 |
|    1 | B    | Z    |    2 |
+------+------+------+------+

(5 行)

我需要这样的o/p

+------+------+------+------+
| col1 | col2 | col3 | rank |
+------+------+------+------+
|    1 | A    | X    |    4 |
|    2 | C    | Y    |    3 |
|    1 | B    | Z    |    2 |
+------+------+------+------+

所以我写了如下查询

select col1,col2,col3,rank,dense_rank() over(order by rank desc) from table1;

但它没有给出正确的o/p

4

3 回答 3

1

尝试这个 !!

select a.col1,a.col2,a.col3,max(a.rank) as rank 
          from [dbo].[5] a join [dbo].[5] b 
              on a.col1=b.col1 group by a.col1,a.col2,a.col3 
于 2013-10-28T05:54:18.117 回答
0

以下内容应与您要查找的内容相匹配:

select col1,col2,col3,rank,dense_rank() over(order by rank desc) from table1
 WHERE col1 IS NOT NULL
GROUP BY 1, 2, 3, 4;

如果需要,还可以在 order by 子句中使用数字别名。

于 2013-10-28T11:45:32.243 回答
0

看起来您需要使用 max() 进行聚合:

select
    col1,col2,col3,
    max(rnk)
from table1
group by col1,col2,col3

如果您可以col1为 的一种组合设置不同的值col2, col3,那么distinct on您需要的是:

select distinct on (col2, col3)
    col1,col2,col3,
    rnk
from table1
order by col2, col3, rnk desc

sql fiddle demo

于 2013-10-28T05:38:50.317 回答