Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle zwraca ten sam alias dla różnych przypadków w wybranych

Zakładając, że Twoje podzapytanie już otrzymuje poprawną wartość i pytasz tylko, jak uzyskać obie wartości „artykułu” w tej samej kolumnie, wszystko, co musisz zrobić, to przenieść podzapytanie do drugiego when sprawdź w pierwszym case wyrażenie, zamiast jako osobna kolumna:

SELECT
     tbl.parent,
     list.list_value,
     tbl.values_column,
     CASE
         WHEN list.list_value = 'Article' THEN tbl.values_column
         WHEN list.list_value = 'Paragraph' THEN (
             SELECT
                 values_column
             FROM
                 pro_table
             WHERE
                 pro_table.id_pro_table = tbl.parent
         )
     END AS article,
     CASE
         WHEN list.list_value = 'Paragraph' THEN tbl.values_column
     END AS paragraph
 FROM
     pro_table tbl 
     LEFT JOIN list ON list.id_list = tbl.id_t_list

Możesz zastąpić podzapytanie lewym sprzężeniem z powrotem do tej samej tabeli i połączyć wyniki:

SELECT
     tbl.parent,
     list.list_value,
     tbl.values_column,
     COALESCE (
         CASE
             WHEN list.list_value = 'Article' THEN tbl.values_column
         END,
         tbl2.values_column
     ) AS article,
     CASE
         WHEN list.list_value = 'Paragraph' THEN tbl.values_column
     END AS paragraph
 FROM
     pro_table tbl 
     LEFT JOIN list ON list.id_list = tbl.id_t_list
     LEFT JOIN pro_table tbl2 ON tbl2.id_pro_table = tbl.parent

... ale to powoduje pewne założenia dotyczące hierarchii, więc prawdopodobnie musisz zaostrzyć połączenie w oparciu o typ listy.

db<>skrzypce z wymyślonymi relacjami między tymi samymi sześcioma wierszami, które pokazałeś, ponieważ nie mamy rzeczywistych identyfikatorów.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę przechowywać ciąg binarny w kolumnie CLOB?

  2. Wyświetlanie wartości LITAGG w komórce na podstawie wartości innej kolumny

  3. Jak utworzyć strefę DMZ dla EBS R12?

  4. Czy Oracle sqlldr może zaakceptować wpis TNS jako kwalifikator wystąpienia w Oracle 10 i 11?

  5. Szybki sposób na generowanie połączonych ciągów w Oracle