0
votes

Besoin de requêtes Oracle pour consolider plusieurs lignes en une avec une colonne pour chaque

J'ai le jeu de données suivant: xxx pré>

Je voudrais une requête pouvant la sortir à une ligne par AA_ASSET_ID: P>

ID    Lab_System Equipment Accessory
1023  Workcell   Sorter    Head tip


5 commentaires

C'est oracle 12c


Y a-t-il seulement 3 noms de classe?


Cela peut être fait avec pivot, mais il y a quelques questions à considérer (puis répondez ici, afin que nous puissions aider). (1) Vous souciez-vous des autres données dans la table, comme Asset_ID et CLASS_ID? (2) Tous les noms de classe sont-ils connus à l'avance (sans se jeter sur les données dans la table)? (3) Les noms de colonne sont-ils écrits dans cette affaire exacte (capuchon initial, minuscule pour le reste du mot) une partie de votre exigence?


Il peut y avoir plus de 3 mais pour mon cas d'utilisation particulier, je ne suis intéressé que par ces 3.


Les noms de classe sont constants et connus. Ils sont dans une table apparentée mais ils ne vont pas changer. Je sais que 1,2,4 sont ce qui m'intéresse. Oui Les noms de classe sont dans ce cas exactement.


4 Réponses :


2
votes

avec agrégation conditionnelle:

ID      LAB_SYSTEM  EQUIPMENT   ACCESSORY
1023    Workcell    Sorter      Head tip


1 commentaires

Celui-ci semble faire ce dont j'ai besoin. Merci beaucoup à tous.



1
votes

Avec l'opérateur de pivot, vous pouvez le faire comme ceci: (NOTE - La clause avec la solution ne fait pas partie de la solution; Je l'utilise que parce que je n'ai pas votre table réelle. Supprimer quand vous testez sur un réel Tableau)

with
  assets (aa_asset_id, asset_id, asset_name, class_id, class_name) as (
    select 1023, 1023, 'Head tip', 4, 'Accessory'  from dual union all
    select 1023, 1056, 'Sorter'  , 2, 'Equipment'  from dual union all
    select 1023, 1557, 'Workcell', 1, 'Lab System' from dual
  )
select *
from   (select aa_asset_id, asset_name, class_name from assets)
pivot  (max(asset_name) for class_name in ('Lab System' as "Lab System",
                                           'Equipment'  as "Equipment" ,
                                           'Accessory'  as "Accessory" ))
;

AA_ASSET_ID Lab System Equipment Accessory
----------- ---------- --------  ---------
       1023 Workcell   Sorter    Head tip


0 commentaires

1
votes

Vous pouvez utiliser pivot xxx

ou pivot xml , afin d'avoir des noms de colonne dynamiques vs. / p>

peut-être quelque chose comme xxx


0 commentaires

0
votes

Vous avez la possibilité d'utiliser le modèle clause: xxx

sortie: xxx

démo sur SQL FIDDLE .


0 commentaires