0
votes

Comment extraire des valeurs des lignes groupées vers des colonnes spécifiques dans Oracle SQL?

Supposons que j'ai une table comme celle-ci dans Oracle: xxx

Comment puis-je sélectionner les données telles que ci-dessous: xxx

?


0 commentaires

3 Réponses :


1
votes

essayer avec case code> expressions pour pivoter vos données.

select
    PersonId,
    max(case when ValueType = 'FirstName' then Value end) as FirstName,
    max(case when ValueType = 'LastName' then Value end) as LastName,
    max(case when valueType = 'City' then value end) City
from yourTable
group by
    PersonId


0 commentaires

1
votes

Vous pouvez pivoter votre ensemble de données avec agrégation conditionnelle:

select
    personid,
    max(case when valuetype = 'FirstName' then value end) firstname,
    max(case when valuetype = 'LastName'  then value end) lastname,
    max(case when valuetype = 'City'      then value end) city
from mytable
group by personid


0 commentaires

0
votes

L'ancienne façon de pivoter (et, surtout, la manière compatible SQL standard) utilise une agrégation conditionnelle, comme indiqué dans les réponses de Zealous et GMB.

Oracle a introduit le pivot (et associé Opérateur ) Incivot de la version 11.1, c'est-à-dire très longtemps. Il illustre cette approche ci-dessous. Ces opérateurs sont particulièrement utiles lorsque nous devons pivoter (ou impucher) plusieurs colonnes à la fois; Cependant, ce n'est pas le cas dans ce fil.

Configuration de la table d'essai: xxx

requête et sortie: xxx

et - peut-être plus comme une curiosité (avec une applicabilité plus grave, peut-être à d'autres problèmes plus difficiles) - Voici une solution utilisant match_recognize introduit dans Oracle 12.1. Surtout, contrairement à toutes les autres solutions, cette approche n'utilise pas d'agrégation de quelque nature que ce soit. xxx


0 commentaires