[英]SQL Query - Distinct or Unique?
SQL的新增功能,它具有一個查詢,該查詢通過許多表在多個聯接中提取某些數據。
樣本數據:
PERSON_NAME FUNCTION_NAME FUNCTION_ID FUNCTION_GROUP
Bob View Result 1 Editor
Bob Edit Result 4 Editor
Bob Delete Result 3 Editor
Bob Email Result 8 Editor
Mary Print Letter 45 Admin
Mary Grant Access 37 Admin
函數具有ID,而function_groups具有許多函數。 我想查詢數據,因此與其看起來像上面的示例一樣,它看起來像:
PERSON_NAME FUNCTION_NAME FUNCTION_ID FUNCTION_GROUP
Bob View Result,Edit Result, Delete Result 1,4,3,8 Editor
Mary Print Letter,Grant Access 45,37 Admin
作為一個結果,“鮑勃屬於編輯器,編輯器具有以下功能”,而不是最初的示例,在此示例中,返回一行一行。
我認為獨特或獨特的關鍵字可以幫助我嗎? 謝謝!
編輯:現在與代碼
select staff_member.person_name, function.function_name,staff_group_function.function_id, staff_group.function_group_name
from staff_member
inner join staff_group
on staff_group.staff_group_id=staff_group_member.staff_group_id
inner join staff_group_function
on staff_group_function.staff_group_id=staff_group_member.staff_group_id
inner join function
on function.function_id=staff_group_function.function_group_name
不。 如果您具有Oracle 11g2,則需要LISTAGG()
。 這可能是您的查詢:
SELECT person_name,
LISTAGG(function_name, ', ') WITHIN GROUP (ORDER BY 1) function_name,
LISTAGG(function_id, ', ') WITHIN GROUP (ORDER BY 1) function_id,
function_group
FROM my_table
GROUP BY person_name, function_group
或者(按照您的最新評論):
SELECT person_name,
LISTAGG(function_name, ', ') WITHIN GROUP (ORDER BY 1) function_name,
LISTAGG(function_id, ', ') WITHIN GROUP (ORDER BY 1) function_id,
LISTAGG(function_group, ', ') WITHIN GROUP (ORDER BY 1) function_group
FROM my_table
GROUP BY person_name
對於11g2之前的任何版本,這篇有趣的文章將為您提供解決方案:
http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php
在10g
其工作原理如下
with tab as (
select 'Bob' PERSON_NAME,'View Result' FUNCTION_NAME,'1' FUNCTION_ID,'Editor' FUNCTION_GROUP from dual
union all
select 'Bob' PERSON_NAME,'Edit Result' FUNCTION_NAME,'4' FUNCTION_ID,'Editor' FUNCTION_GROUP from dual
union all
select 'Bob' PERSON_NAME ,'Delete Result'FUNCTION_NAME,'3' FUNCTION_ID,'Editor' FUNCTION_GROUP from dual
union all
select 'Bob' PERSON_NAME,'Email Result' FUNCTION_NAME,'8' FUNCTION_ID,'Editor' FUNCTION_GROUP from dual
union all
select 'Mary' PERSON_NAME,'Print Letter' FUNCTION_NAME,'45' FUNCTION_ID,'Admin' FUNCTION_GROUP from dual
union all
select 'Mary' PERSON_NAME , 'Grant Access' FUNCTION_NAME ,'37' FUNCTION_ID,'Admin' FUNCTION_GROUP from dual
)
select person_name
,wm_concat(function_name) function_name
,wm_concat(function_id) function_id
,function_group
from tab
group by person_name,function_group
產量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.