GROUPBY子句中的Oracle模式匹配

GROUPBY子句中的Oracle模式匹配,oracle,Oracle,H, 如何在“GROUPBY”子句中使用模式匹配函数 以下是数据 emp_name transaction_id John 1001 John= 1002 Peter 1003 我想根据emp_名称分组。这里的“John”和“John=”都是同一个雇员。我想忽略员工姓名是否在列的末尾有“=”符号 预期结果: Emp_name countt John 2 Peter 1 编辑,因为您说过名称可以包含= select case when

H,

如何在“GROUPBY”子句中使用模式匹配函数

以下是数据

emp_name transaction_id 
John      1001
John=     1002
Peter     1003
我想根据emp_名称分组。这里的“John”和“John=”都是同一个雇员。我想忽略员工姓名是否在列的末尾有“=”符号

预期结果:

Emp_name  countt
John      2
Peter     1
编辑,因为您说过名称可以包含=

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
编辑,因为您说过名称可以包含=

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

一个简单的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

一个简单的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

replace
工作正常,速度快。但是,既然您要求进行模式匹配,下面是一个带有模式的答案:

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

replace
工作正常,速度快。但是,既然您要求进行模式匹配,下面是一个带有模式的答案:

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

“=”是唯一的限制吗?是的是在“=”符号位于末尾时需要忽略的唯一条件。例如,John和Jo=hn是不同的。但是约翰和约翰是同一个雇员是唯一的限制吗?是的是在“=”符号位于末尾时需要忽略的唯一条件。例如,John和Jo=hn是不同的。但是John和John=是同一个雇员如果“=”符号在末尾,则需要忽略。例如,John和Jo=hn是不同的。但是John和John=是同一个雇员。如果“=”符号在末尾,则需要忽略它。例如,John和Jo=hn是不同的。但是John和John=是同一个员工。您是第一个处理只应在名称末尾替换=的人…您是第一个处理只应在名称末尾替换=的人。。。