9
votes

Répéter des lignes basées sur la valeur de la colonne dans chaque ligne

J'ai cette table avec les données suivantes xxx

en fonction de la valeur dans la colonne de répétition pour chaque ligne, la ligne doit être répétée à nouveau. Par exemple, pour le travail 1, la valeur de répétition est 2, donc le travail 1 devrait répéter deux fois de plus.

La table résultante doit être aussi inférieure à xxx

Quelqu'un peut-il m'aider avec cette requête? J'utilise Oracle 10G


0 commentaires

3 Réponses :


-2
votes

Au lieu de faire cette manipulation avec la requête, vous pouvez d'abord obtenir ces données dans une table de données et ajouter des lignes à une nouvelle table de données en fonction de la valeur de la répétition, puis de lier cette nouvelle table de données.


0 commentaires

10
votes

Vous pouvez utiliser un CTE récursif: xxx

Exemple en direct chez SQL Fiddle .


2 commentaires

Oracle n'a présenté que la CTE récursive (affacturage des sous-requires AKA) dans 11GR2. Hélas le PO déclare qu'ils utilisent 10g.


Merci, ça marche très bien. Je ne comprends pas le CTE récursif, je vous serais reconnaissant si vous pouviez l'expliquer un peu.



7
votes

supposant que vous ne produisiez pas plus de 1000 rangées par ligne: xxx

voici un test: http://sqlfiddle.com/#!4/4519f/12

Mise à jour: Comme Jeffrey Kemp a dit, vous pouvez "détecter" le maximum avec une sous-requête: xxx


1 commentaires

+1, en outre, vous pouvez remplacer 1000 avec une sous-requête pour trouver la valeur max pour la répétition.