sql >> Database teknologi >  >> RDS >> Oracle

kolonneværdier i en række

Hvis du er på 11.2 i stedet for kun 11.1, kan du bruge LISTAGG aggregeret funktion

SELECT listagg( interval, ',' ) 
         WITHIN GROUP( ORDER BY interval )
  FROM (SELECT DISTINCT range AS interval
          FROM table_name
         WHERE age = 62)

Hvis du bruger en tidligere version af Oracle, kan du bruge en af ​​de andre Oracle strengaggregeringsteknikker på Tim Halls side. Før 11.2 ville min personlige præference være at oprette en brugerdefineret aggregeret funktion så du kan derefter

SELECT string_agg( interval )
  FROM (SELECT DISTINCT range AS interval
              FROM table_name
             WHERE age = 62)

Hvis du ikke vil oprette en funktion, kan du dog bruge ROW_NUMBER og SYS_CONNECT_BY_PATH tilgang selvom det har en tendens til at blive lidt sværere at følge

with x as (
  SELECT DISTINCT range AS interval
          FROM table_name
         WHERE age = 62 )
select ltrim( max( sys_connect_by_path(interval, ','))
                keep (dense_rank last order by curr),
              ',') range
  from (select interval,
               row_number() over (order by interval) as curr,
               row_number() over (order by interval) -1 as prev
          from x)
connect by prev = PRIOR curr
  start with curr = 1



  1. Sådan omformuleres en sql-forespørgsel

  2. Kald lagret procedure ved hjælp af ADODB i PHP

  3. Forårsaget af:org.postgresql.util.PSQLEundtagelse:FATAL:adgangskodegodkendelse mislykkedes for brugeradministrator

  4. Hvordan genereres månedsliste i PostgreSQL?