use*_*653 3 sql oracle oracle11g
我正在尝试从Oracle查询创建报告.数据是这样的:
GROUP_ID | COUNT_1 | COUNT_2
1 | 100 | 123
1 | 101 | 123
1 | 283 | 342
1 | 134 | 123
2 | 241 | 432
2 | 321 | 920
2 | 432 | 121
2 | 135 | 342
Run Code Online (Sandbox Code Playgroud)
我想要做的只是当它在组中的第一个时返回GROUP_ID,并且当它在组中的最后一个时返回一些其他值,例如
GROUP_ID | COUNT_1 | COUNT_2
1 | 100 | 123
| 101 | 123
| 283 | 342
last | 134 | 123
2 | 241 | 432
| 321 | 920
| 432 | 121
last | 135 | 342
Run Code Online (Sandbox Code Playgroud)
这可能吗?
谢谢!
没有测试,但这应该是主意.如果您需要按COUNT_1或COUNT_2排序,则应将其包含在"解析函数" over子句中,partition by GROUP_ID order by COUNT_1
请参阅此处以了解分析功能是什么.
select
case when ROW_NUMBER = 1 then GROUP_ID
when ROW_NUMBER = GROUP_COUNT then 'last'
else NULL
end GROUP_ID
,COUNT_1
,COUNT_2
from(
select
GROUP_ID
,COUNT_1
,COUNT_2
,row_number() over(partition by GROUP_ID) ROWNUMBER
,count(GROUP_ID) over (partition by GROUP_ID) GROUP_COUNT
from
FOO
)
Run Code Online (Sandbox Code Playgroud)