sql >> Database >  >> RDS >> Oracle

Toegang tot 2e element in varray-kolom

U moet rijen 1 en 2 selecteren en vervolgens een manier bedenken om de ongewenste voorgaande rijen eruit te filteren - een manier is om aggregatie te gebruiken met een CASE statement dat alleen overeenkomt met de tweede rij:

SQL Fiddle

Oracle 11g R2 Schema-instellingen :

CREATE TABLE mytable ( myvarraycolumn ) AS
  SELECT SYS.ODCINUMBERLIST( 1, 2, 3 ) FROM DUAL UNION ALL
  SELECT SYS.ODCINUMBERLIST( 4, 5, 6 ) FROM DUAL;

Query 1 :

SELECT (
         SELECT MAX( CASE ROWNUM WHEN 2 THEN COLUMN_VALUE END )
         FROM   TABLE( t.myvarraycolumn )
         WHERE  ROWNUM <= 2
       ) AS second_element
FROM   mytable t

Resultaten :

| SECOND_ELEMENT |
|----------------|
|              2 |
|              5 |

Het werkt niet omdat:voor de eerste rij in de gecorreleerde binnenquery, ROWNUM is 1 en uw filter is WHERE ROWNUM = 2 dan reduceert dit tot WHERE 1=2 en het filter komt niet overeen en de rij wordt weggegooid. De volgende rij wordt dan getest tegen een ROWNUM van 1 (aangezien de vorige rij niet langer in de uitvoer staat en geen rijnummer zal hebben), zal de test opnieuw niet slagen en worden weggegooid. Herhaal, advertentie misselijkmakend en alle rijen mislukken de WHERE filter en worden weggegooid.




  1. hoe selecteer ik AVG van meerdere kolommen op een enkele rij?

  2. Hulp nodig om waarde uit drie kolommen op te slaan

  3. Apache-onderliggend proces afgesloten met status 255

  4. Wie heeft er documenten over PostgreSQL-achtergrondprocessen?