sql >> Databasteknik >  >> RDS >> Oracle

Transponera en frågeutgång

Här är ett sätt att göra detta med bara underfrågor och aggregering:

select name,
       sum(case when fy = 2014 then x end) as "2014",
       sum(case when fy = 2015 then x end) as "2015",
       sum(case when fy = 2016 then x end) as "2016"
from (select fy,
             (case when n.n = 1 then 'x1'
                   when n.n = 2 then 'x2'
                   when n.n = 3 then 'x3'
                   when n.n = 4 then 'x4'
              end) as name,
             (case when n.n = 1 then x1
                   when n.n = 2 then x2
                   when n.n = 3 then x3
                   when n.n = 4 then x4
              end) as x
      from temp_table cross join
            (select 1 as n from dual union all
             select 2 from dual union all
             select 3 from dual union all
             select 4 from dual
            ) n
     ) t
group by name;

Du kan också använda pivot , men det är ett mycket nyligen tillägg till Oracle SQL, så jag är benägen att använda den här metoden.



  1. Köåtkomst till databasen för att undvika flera cacheobjekt

  2. Exempel på att konvertera "datum" till "datetime2" i SQL Server (T-SQL)

  3. SQL Server:Endast sista posten i GROUP BY

  4. MySQL-avvisande parameter