sql >> データベース >  >> RDS >> Oracle

Oracle10gのLISTAGG代替

    XMLAGGを使用してみてください このように:

    select
        p.PeopleID,
        rtrim(xmlagg(xmlelement(e, s.SiteName, ',')).extract('//text()').getclobval(), ',')
    from people p
    join site s on p.SiteID = s.SiteID
    group by p.PeopleID;
    

    特定の順序で連結する必要がある場合、たとえばSiteIdの昇順が必要な場合は、order byを追加します。 xmlaggの句:

    select
        p.PeopleID,
        rtrim(xmlagg(xmlelement(e, s.SiteName, ',')
                       order by s.SiteId).extract('//text()').getclobval(), ',')
    from people p
    join site s on p.SiteID = s.SiteID
    group by p.PeopleID;
    

    編集:

    サイト100に割り当てられているすべての人の結果を表示する場合:

    select p.PeopleID,
        rtrim(xmlagg(
                    xmlelement(e, s.SiteName, ',') order by s.SiteId
                ).extract('//text()').getclobval(), ',')
    from people p
    join site s on p.SiteID = s.SiteID
    join (
        select distinct PeopleID
        from people
        where siteID = 1
        ) p2 on p.PeopleID = p2.PeopleID
    group by p.PeopleID;
    


    1. Oracleのインデックスとテーブルの所有者に関する情報を取得するにはどうすればよいですか?

    2. PostgreSQL関数で引数を指定してシステムコマンドを実行する

    3. AJAXでのエンコーディングの問題

    4. SQLクエリの配列?