我正在尝试从 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
我想要做的是仅在组中的第一个时返回 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
这可能吗?
谢谢!
最佳答案
未测试,但这应该是想法。如果您需要按 COUNT_1 或 COUNT_2 排序,则应将其包含在分析函数的 over
中。条款,partition by GROUP_ID order by COUNT_1
引用 here了解什么是解析函数。
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
)
关于sql - 甲骨文 11g : only return a value if row is first or last in group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17085347/