Supposons que j'ai une table comme celle-ci dans Oracle: Comment puis-je sélectionner les données telles que ci-dessous: p> ? p> p>
3 Réponses :
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
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
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 Configuration de la table d'essai: p> requête et sortie: p> et - peut-être plus comme une curiosité (avec une applicabilité plus grave, peut-être à d'autres problèmes plus difficiles) - Voici une solution utilisant pivot code> (et associé
Opérateur CODE>) 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. p>
match_recognize code> 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. P>