How to make row values return as columns in a select in Oracle?

Asked

Viewed 18 times

0

The select I made is returning conforms example below:

Select:

SELECT Count(*) AS total,b."Nome",a."Funcionalidade",
  DECODE(a."Funcionalida", 
          128, 'ProdutoA',
          4, 'ProdutoB',
          512, 'ProdutoC'
          ) tipo  
          FROM s."Documentos" a
          JOIN s."Usuarios" b
  ON a."IdTecnico" = b."Id"
GROUP BY a."IdTecnico",b."Nome",a."Funcionalidade" ORDER BY b."Nome"

Return:

total | nome | tipo     
2     |Joao  |ProdutoA
51    |Joao  |ProdutoB        
7     |Joao  |ProdutoC   
4     |Maria |ProdutoA
30    |Maria |ProdutoB 
1     |Pedro |ProdutoA
58    |Pedro |ProdutoB        
3     |Pedro |ProdutoC  

How can I make the return with the values ProdutoA, ProdutoB, ProdutoC, as column titles, as below:

Expected return:

    Nome | ProdutoA | ProdutoB| ProdutoC
    Joao | 2        | 51      | 7  
    Maria| 4        | 30      | 0  
    Pedro| 1        | 58      | 3  
  • 1

    this is called "pivot", look for other related questions here in Sopt, like this: https://answall.com/questions/224886/using-pivot-oracle

1 answer

0

I got it with select:

SELECT 
    b."Nome",
    SUM(case when a."Funcionalidade" = 128 then 1 else 0 end) ProdutoA,
    SUM(case when a."Funcionalidade" = 4 then 1 else 0 end) ProdutoB,
    SUM(case when a."Funcionalidade" = 512 then 1 else 0 end) ProdutoC
        
FROM s."Documentos" a
INNER JOIN s."Usuarios" b ON a."IdTecnico" = b."Id"
WHERE    
GROUP BY b."Nome"       
ORDER BY b."Nome"

Browser other questions tagged

You are not signed in. Login or sign up in order to post.