1

我正在使用 PL/SQL (Oracle),这是我目前从一个简单的选择查询中得到的结果(按顺序排列):

Name        Hour        Value
---------------------------------
Peter       1           10
Peter       2           12
Peter       3           22
Joe         1           8
Joe         2           8
Joe         3           12
Richard     1           9
Richard     2           7
Matt        1           11

在 SSRS 中,我有一个复杂的矩阵,我想在其中使用交替的行颜色*。因此,我需要行号,但它必须按名称“分组”。所以这就是我想要的:

Name        Hour        Value        Row_Num
--------------------------------------------
Peter       1           10           1
Peter       2           12           1
Peter       3           22           1
Joe         1           8            2
Joe         2           8            2
Joe         3           12           2
Richard     1           9            3
Richard     2           7            3
Matt        1           11           4

请注意 Row_Num(或任何您想称呼它的名称)如何仅在 Name 更改时更改。这在 PL/SQL 中可能吗?

*我知道在 SSRS 中获得交替行颜色的技术,但我使用的是矩阵,并且 Kyle Hale 在 ahmad 对这个问题的回答的评论中提到了这个问题

4

2 回答 2

4

dense_rank()使用查询中用于获取结果的函数很容易做到这一点:

select name, hour, value,
       dense_rank() over (order by name) as row_num
from t;

注意:这不一定会按照您给定的顺序分配值。但是每个组都会得到不同的值。如果您按照给定的顺序需要它们,那么您需要确定顺序。SQL 表本质上是无序的,因此需要一列来指定排序。

于 2013-09-18T15:21:31.103 回答
2
select  name
,       value
,       hour
,       dense_rank() over (partition by 1 order by name) as row_num
from
(
        select 'Peter' name,  '1' hour , '10' value from dual union all
        select 'Peter',  '2', '12' from dual union all
        select 'Peter',  '3', '22' from dual union all
        select 'Joe',    '1', '8'  from dual union all
        select 'Joe',    '2', '8'  from dual union all
        select 'Joe',    '3', '12' from dual union all
        select 'Richard','1', '9'  from dual union all
        select 'Richard','2', '7'  from dual union all
        select 'Matt',   '1', '11' from dual
)

Joe     8   2   1
Joe     12  3   1
Joe     8   1   1
Matt    11  1   2
Peter   22  3   3
Peter   12  2   3
Peter   10  1   3
Richard 9   1   4
Richard 7   2   4
于 2013-09-18T15:23:43.037 回答