分组中的Oracle模式匹配

时间:2014-07-21 12:27:07

标签: oracle

H,

如何在“group By”子句中使用模式匹配功能。

以下是数据

emp_name transaction_id 
John      1001
John=     1002
Peter     1003

我想基于emp_name进行分组。这里'John'和'John ='都是同一名员工。如果员工姓名在列的末尾有“=”符号,我想忽略。

预期结果:

Emp_name  countt
John      2
Peter     1

3 个答案:

答案 0 :(得分:3)

replace工作正常且速度很快。但是既然你要求模式匹配,这里有一个模式的答案:

SELECT regexp_replace(emp_name, '=$', ''), count(*) AS countt
  FROM employees
 GROUP BY regexp_replace(emp_name, '=$', '');

答案 1 :(得分:1)

select
  replace (emp_name, '=', '') as emp_name,
  count (*) as countt
from employees
group by replace (emp_name, '=', '')

编辑,因为您说该名称可以包含=

select
  case
    when emp_name like '%='
      then substr (emp_name, 1, length (emp_name) - 1)
    else emp_name
  end as emp_name,
  count (1) as countt
from employees
group by
  case
    when emp_name like '%='
      then substr (emp_name, 1, length (emp_name) - 1)
    else emp_name
  end

答案 2 :(得分:1)

一个简单的case语句只替换最右边的=如果存在的话。

SELECT case when right(emp_name,1) = '=' then left(emp_Name,len(emp_name-1))
       else emp_name end as EmpName, count(Transaction_ID) countt
FROM dataTable
GROUP BY case when right(emp_name,1) = '=' then left(emp_Name,len(emp_name-1))
        else emp_name end