sql >> Databasteknik >  >> RDS >> Oracle

kolumnvärden i rad

Om du är på 11.2 istället för bara 11.1 kan du använda LISTAGG aggregerad funktion

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

Om du använder en tidigare version av Oracle kan du använda en av de andra Oracle-strängaggregationstekniker på Tim Halls sida. Före 11.2 skulle min personliga preferens vara att skapa en användardefinierad aggregerad funktion så att du kan sedan

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

Om du däremot inte vill skapa en funktion kan du använda ROW_NUMBER och SYS_CONNECT_BY_PATH närmar sig även om det tenderar att bli lite svårare att följa

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. Hur man konverterar tal till ord - ORACLE

  2. Hur man installerar SQL Server på en Mac

  3. Visa mysql slumpmässigt resultat

  4. Hur man automatiskt ökar med 2 för en viss tabell i mysql