sql >> Databasteknik >  >> RDS >> Oracle

Oracle returnerar samma alias för olika fall på valt

Förutsatt att din underfråga redan får tillbaka rätt värde, och du bara frågar hur du får båda "artikel"-värdena i samma kolumn, behöver du bara flytta underfrågan till en andra when kontrollera inom det första case uttryck, istället för som en egen kolumn:

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

Du kan ersätta underfrågan med en vänsterkoppling tillbaka till samma tabell och sammanföra resultaten:

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

... men det är att göra vissa antaganden om hierarkin, så du måste förmodligen skärpa sammanfogningen baserat på listtypen.

db<>fiol med påhittade relationer mellan samma sex rader som du visade, eftersom vi inte har de faktiska ID:n.




  1. Hur man får en lista över datum mellan två datum i mysql select query

  2. Hur man förbättrar INSERT INTO ... SELECT låsbeteende

  3. Mysql-fråga med två tabeller php

  4. problem med python manage.py migrate -> Ingen modul med namnet psycopg2