我正在使用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中,我有一个复杂的矩阵,我希望有交替的行颜色*。因此,我需要rownumber,但必须按名称“分组”。所以这就是我想要的:
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中获取交替行颜色的技术,但是我使用了一个矩阵,并且在对艾哈迈德回答this question的评论中提到了Kyle Hale提到的问题。
答案 0 :(得分:4)
使用查询结果中的dense_rank()
函数很容易做到这一点:
select name, hour, value,
dense_rank() over (order by name) as row_num
from t;
注意:这不一定按照您给出的顺序分配值。但是每个小组都会得到不同的价值。如果您按照给定的顺序需要它们,那么您需要确定订单。 SQL表本质上是无序的,因此需要一列来指定排序。
答案 1 :(得分: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