Oracle: Comment faire une requête pivot?
Thomas Carlton
J'ai une table comme celle-ci:
Tableau 1: numéro d' identification , produit varchar2, argument varchar2, valeur AnyData
Quand il est rempli, cela ressemble à ceci:
Je souhaite créer une vue telle que le résultat est:
J'ai essayé la requête suivante:
select * from
(select ARGUMENT, VALUE from Table)
pivot
(first(VALUE) for ARGUMENT in ('Weight','Size','First Use'))
J'ai essayé avec les deux fonctions d'agrégation: First et Max.
Pour les deux, j'obtiens les erreurs suivantes:
- ORA-56902: attendez-vous à une fonction d'agrégat dans le fonctionnement du pivot.
- ORA-22950: impossible de commander des objets sans la méthode MAP ou ORDER.
Je comprends ces deux erreurs. La requête pivot peut fonctionner comme ceci.
Mais est-ce que quelqu'un connaît une autre façon d'obtenir le résultat souhaité s'il vous plaît?
Merci. À votre santé,
D-Shih
J'utiliserais une fonction aggravée pour faire pivoter.
select Product,
MAX(CASE WHEN ARGUMENT = 'Weight' THEN "VALUE" END) Weight,
MAX(CASE WHEN ARGUMENT = 'Size' THEN "VALUE" END) Size,
MAX(CASE WHEN ARGUMENT = 'First Use' THEN "VALUE" END) FirstUse
from
(
select
Product,
ARGUMENT,
"VALUE"
from Table
) t1
GROUP BY Product
Si vous utilisez la même table, vous pouvez essayer de sélectionner directement une table au lieu d'une sous-requête.
select Product,
MAX(CASE WHEN ARGUMENT = 'Weight' THEN "VALUE" END) Weight,
MAX(CASE WHEN ARGUMENT = 'Size' THEN "VALUE" END) Size,
MAX(CASE WHEN ARGUMENT = 'First Use' THEN "VALUE" END) FirstUse
from Table
GROUP BY Product