簡體   English   中英

SQL查詢-不同還是獨特?

[英]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

UNIQUEDISTINCT與分組和匯總結果無關。 您必須GROUP BY PERSON_NAMEFUNCTION_GROUP ,然后應用您自己的聚合函數將其余結果分組。

本文確切地告訴您如何通過使用LISTAGG Oracle中的聚合函數將逗號與字符串連接。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM