sql >> Databáze >  >> RDS >> Oracle

Přístup ke 2. prvku ve sloupci varray

Musíte vybrat řádky 1 a 2 a pak vymyslet způsob, jak odfiltrovat nechtěné předchozí řádky – jedním ze způsobů je použití agregace s CASE příkaz, aby odpovídal pouze druhému řádku:

SQL Fiddle

Nastavení schématu Oracle 11g R2 :

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

Dotaz 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

Výsledky :

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

Nefunguje, protože:pro první řádek v korelovaném vnitřním dotazu ROWNUM je 1 a váš filtr je WHERE ROWNUM = 2 pak se to sníží na WHERE 1=2 a filtr se neshoduje a řádek se zahodí. Následující řádek pak bude testován proti ROWNUM z 1 (protože předchozí řádek již není ve výstupu a nebude mít číslo řádku), což opět neprojde testem a bude zahozeno. Opakuji, nevolnost a všechny řádky nesplňují WHERE filtr a jsou vyřazeny.




  1. Nastavení a konfigurace replikace SQL Server

  2. Jak zkombinovat datum a čas z různých sloupců MySQL pro srovnání s úplným datem a časem?

  3. Připojte pyodbc k Postgres

  4. výpočty vzdálenosti v dotazech mysql