sql >> Databasteknik >  >> RDS >> Oracle

Oracle SQL genererar slumpmässig utdata med listaggs

Här är ett sätt - generera strängarna kvasi-slumpmässigt (med ora_hash att göra susen), samtidigt som det är på ett perfekt deterministiskt, reproducerbart sätt. Om du vill få olika (men liknande) resultat, använd det tredje argumentet för att ora_hash för att tillhandahålla ett frö som skiljer sig från standardvärdet (som är 0). Om du vill ha olika resultat varje gång, ange en dbms_random.value() värde som fröet; detta kräver fortfarande att bara ett "slumpmässigt" värde genereras för hela frågan. Du kan också spela med den övre gränsen (i mitt exempel, 280) för att få mer eller färre null (och kortare kontra längre kommaseparerade strängar, mer allmänt).

WITH data ( value ) AS (
  SELECT 30 FROM DUAL UNION ALL
  SELECT 31 FROM DUAL UNION ALL
  SELECT 32 FROM DUAL UNION ALL
  SELECT 33 FROM DUAL
),
ids ( id ) AS (
  SELECT LEVEL
  FROM   DUAL
  CONNECT BY LEVEL <= 8
)
select id, 
       ( select listagg(case when ora_hash(id * value, 1000) < 280 
                             then value end, ',')
                        within group(order by value)
         from   data
       ) as vals
from   ids
;

ID VALS           
-- ---------------
 1 33             
 2 32             
 3                
 4 30,32          
 5 30,31          
 6 32             
 7                
 8   


  1. Varför kan Java inte ansluta till MySQL 5.7 efter den senaste JDK-uppdateringen och hur ska det fixas? (ssl.SSLHandshakeException:Inget lämpligt protokoll)

  2. Varför misslyckas denna ActiveRecord-sats på servern men inte i konsolen

  3. Kopiera från csv till tabell med id seriell kolumn automatisk inkrementerande PSQL

  4. Hur man returnerar frågeresultat som en kommaseparerad lista i PostgreSQL