在Oracle中为连接表创建逗号分隔列表

时间:2014-03-18 09:49:23

标签: sql oracle

我有两张桌子 'ga_mise_en_stage' alias 'm'

and 'ga_annee_academique' alias 'ac'

'ga_annee_academique'上的

foreign key that point to 'ga_mise_en_stage'

我很难在同一个ligne中查询m.code_mise_stage,m.Libelle和所有与m.code_mise_stage相关的ac.annee_academique

schema for ga_mise_en_stage : code_mise_enstage(pk), libelle

schema for ga_annee_academique : code_annee_academique(pk), annee_academique, code_mise_en_stage(fk)

我想要逗号分隔的结果 m.*, "ac.annee_academique, ..."

2 个答案:

答案 0 :(得分:1)

您需要加入外键..

select m.code_mise_stage, m.Libelle, ac.annee_academique, ac.*
FROM ga_annee_academique ac
inner join ga_mise_en_stage m
on ac.code_mise_en_stage = m.code_mise_enstage

修改 逗号分隔列表 - 这仅适用于SQL Server

SELECT  m.code_mise_stage, m.Libelle, STUFF((SELECT  ',' + ac.annee_academique
            FROM ga_annee_academique ac
            WHERE  m.code_mise_enstage=ac.code_mise_en_stage
        FOR XML PATH('')), 1, 1, '') AS listStr
FROM ga_mise_en_stage m
GROUP BY m.code_mise_stage, m.Libelle

编辑:使用系统表使此示例更通用。

select t.TABLE_NAME, STUFF
(
    (select ', ' + c.COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS c 
        WHERE c.TABLE_NAME = t.TABLE_NAME FOR XML PATH(''))
    , 1,1, ''
)
from INFORMATION_SCHEMA.TABLES t where TABLE_NAME = 'ga_mise_en_stage'

以下是XML PATH

的文档

在此示例中,下面的查询将XML作为字符串返回,其中每个元素由','分隔,用作XML元素。

select ', ' + c.COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS c 
        WHERE c.TABLE_NAME = 'FormulaMetrics_tbl' FOR XML PATH('')

答案 1 :(得分:0)

查询将是这样的:

 select M.LIBELLE_STAGE, M.CODE_MISE_STAGE, JOINATE.anneeAcademique from ga_mise_en_stage m
 inner join (select AC.CODE_MISE_EN_STAGE, listagg(AC.ANNEE_ACADEMIQUE, ',') within group (order by AC.CODE_MISE_EN_STAGE) as anneeAcademique from ga_annee_academique ac
  group by AC.CODE_MISE_EN_STAGE) joinate 
  on JOINATE.CODE_MISE_EN_STAGE = M.CODE_MISE_STAGE