2014-07-21 59 views
0

的H組匹配,甲骨文圖案by子句

如何使用模式匹配功能 「GROUP BY」 子句。

下面是數據

emp_name transaction_id 
John  1001 
John=  1002 
Peter  1003 

我想組基於EMP_NAME。這裏'John'和'John ='都是同一名僱員。如果員工姓名在列末尾有'='號,我想忽略它。

預期結果:

Emp_name countt 
John  2 
Peter  1 
+0

是'='唯一的限制嗎? – xQbert

+0

是的。 '='是唯一的條件 – Srinivasan

+0

它需要忽略'='符號是否結束。例如,John和Jo = hn是不同的。但John和John =是同一名員工 – Srinivasan

回答

3

replace工作正常,速度很快。但是,既然你要求模式匹配,這裏有一個模式答案:

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

你是第一個處理=只應該在名稱末尾被替換的人...... – Hambone

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 
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 
+0

如果'='符號結束,則需要忽略它。例如,John和Jo = hn是不同的。但John和John =是同一名僱員。 – Srinivasan