select中的组编号(Oracle)

sax*_*sax 8 sql oracle

我有一个以下示例 - 包含姓名,部门和国家/地区的表格.我需要创建一个select语句,列出所有记录,并为每个部门和国家/地区分配唯一编号(示例中的列组):

Name   Department   Country   Group
====== ============ ========= =====
James  HR           UK        1
John   HR           UK        1
Alice  Finance      UK        2
Bob    Finance      DE        3
Frank  Finance      DE        3
Run Code Online (Sandbox Code Playgroud)

我想到了一些具有分析功能的选择,但我发现只有row_number() over (partition by department, country)哪些数字记录在组内,而不是组本身.你知道如何解决这个问题吗?谢谢!

Qua*_*noi 11

SELECT  t.*, q.grp
FROM    (
        SELECT  q.*, rownum AS grp
        FROM    (
                SELECT  DISTINCT department, country
                FROM    mytable
                ORDER BY
                        department, country
                ) q
        ) q
JOIN    mytable t
ON      t.department = q.department
        AND t.country = q.country 
Run Code Online (Sandbox Code Playgroud)

要么

SELECT  t.*, DENSE_RANK() OVER (ORDER BY department desc, country desc) AS grp
FROM    mytable
Run Code Online (Sandbox Code Playgroud)