La duplication des lignes en fonction de la valeur d'une colonne, dans chaque ligne
J'ai cette table avec les données suivantes
Job Quantity Status Repeat
1 100 OK 2
2 400 HOLD 0
3 200 HOLD 1
4 450 OK 3
Basé sur la valeur de la Répétition de la colonne pour chaque ligne, la ligne doit être répété. Par exemple, pour la Tâche 1, Répétez la valeur est 2, donc la Tâche 1 doit répéter deux fois de plus.
La table résultante devrait être comme ci-dessous
Job Quantity Status Repeat
1 100 OK 2
1 100 OK 2
1 100 OK 2
2 400 HOLD 0
3 200 HOLD 1
3 200 HOLD 1
4 450 OK 3
4 450 OK 3
4 450 OK 3
4 450 OK 3
Quelqu'un peut s'il vous plaît aidez-moi avec cette requête?
Je suis à l'aide de sql server
Est-il de toute limite raisonnable sur les valeurs possibles dans
Pas de. Il n'y a pas de limite
Pourquoi le downvote?
Je n'ai pas downvoted
Je ne pense pas que vous pouvez downvote à votre propre question, même si vous avez voulu dans un ajustement de l'auto-effacement. J'ai été demander à la personne qui downvoted votre question, il semble assez valable et intéressant pour moi.
Repeat
?Pas de. Il n'y a pas de limite
Pourquoi le downvote?
Je n'ai pas downvoted
Je ne pense pas que vous pouvez downvote à votre propre question, même si vous avez voulu dans un ajustement de l'auto-effacement. J'ai été demander à la personne qui downvoted votre question, il semble assez valable et intéressant pour moi.
OriginalL'auteur user1345260 | 2012-06-05
Vous devez vous connecter pour publier un commentaire.
Cela permettra de soutenir plus de 7 400 répète pour tout travail individuel (sur mon système). Si vous avez besoin de plus, vous pouvez utiliser un autre système de table ou une jointure croisée.
WITH
représente un expression de table commune. À l'intérieur, que nous venons de tirer un ensemble de nombres à partir d'un système de table qui est la garantie d'avoir beaucoup de lignes (je suppose 7,400 devrait être suffisant dans votre cas). Nous utilisonsTOP
de limiter ce nombre à un plus grand que le plus grandRepeat
de la valeur à votre table. Ensuite, à l'aide de ces nombres, nous avons effectuer une jointure croisée de sorte que nous avons une ligne de la CTE pour chaque nombre <=Repeat
par emploi. Et nous ajoutons 1 sur le côté ainsi (cela permet d'inclure également les lignes oùRepeat = 0
).Merci. C'est très utile
OriginalL'auteur Aaron Bertrand
Si vous avez une table qui a la garantie a plus d'enregistrements que la valeur maximale possible de
repeat
, vous pouvez vous débarrasser de@repeats
et l'utilisation de la table à la place.OriginalL'auteur Quassnoi
Je préfère le dessous de la démarche, car il ne dépend pas de données externe pour que la requête soit un succès et est assez simple. J'ai utilisé Aaron Bertrand, le code d'initialisation de la table de données, mais mon approche sur la façon de répéter données, cette approche n'a pas besoin d'un tableau pour contenir plus de lignes que nécessaire récurrences /ne dépend pas de données externes.
Cheers!
OriginalL'auteur Curtis Watson
Vous pouvez écrire une procédure stockée qui va faire cette requête (curseur) et puis vous pouvez remplir la table temporaire que vous le souhaitez
Fonctionne parfaitement pour moi.
OriginalL'auteur Alexander Kind