J'ai une table avec une liste d'individus qui ont une date d'entrée en vigueur et une date de résiliation. Exemple de personne 1, 20171201, 20180601 Pour chaque enregistrement, j'ai besoin de produire une liste d'années et de mois qu'ils étaient "actifs" entre les deux dates. Donc, la sortie ressemblerait à p>
Ceci est dans SQL Server 2016 Toute aide serait appréciée! P>
3 Réponses :
Basé sur des informations que vous avez fournies, j'ai fait une petite devinette. Peut-être qu'un CTE récursif aidera:
SELECT t.Person
, t.Dt
, DATEPART(yyyy, t.Dt) ActiveYear
, DATEPART(mm, t.Dt) ActiveMonth
FROM t
ORDER BY Dt
Pour le comptage de base, les CTES récursives effectueront horriblement. Notez cet article qui détaille le problème: SqlServerCentral.com/articles/ ...
Merci beaucoup pour votre exemple. Je cherchais la variable de table, je ne pouvais tout simplement pas obtenir la syntaxe correcte et devrait probablement l'avoir posté. J'ai pris votre exemple, l'a comparé à la mienne et j'ai trouvé mon erreur. Le problème est maintenant que je suis maintenant en cours d'exécution dans une "récursivité maximale 100 a été épuisée avant l'achèvement de la déclaration". Certaines des dates ont assez la distance entre eux. Je ferai des recherches supplémentaires sur mon côté. Merci encore pour votre réponse. Je pense que ça me fait venir de ce que je veux!
Bienvenue sur Stackoverflow! Pour une meilleure aide, il est bon d'inclure des données d'échantillons de DDL facilement consommables que nous pouvons utiliser pour recréer rapidement ce que vous faites et fournissez une solution. Remarque Cet exemple de données: retourne: strong> p> (J'ai ajouté quelques lignes). Voici ma solution: p> qui retourne: strong> p> laissez-moi savoir si vous le savez si vous avez des questions. p> p>
Juste parce que je ne l'ai pas vu offert. Voici une autre approche qui utilise une table de calendrier ad-hoc
Notez la date de base de 2000-01-01 et 10 000 jours ... Développer ou contracter si nécessaire P>
fort> p> retours strong> p>
Avez-vous encore essayé quelque chose? N'oubliez pas que c'est un forum pour aider à surmonter des difficultés, plutôt que d'un forum de résolution des devoirs. BTW, cette capture d'écran dit "Person1, personne2, etc." Je suppose que ce n'est pas correct, non? Si la date "à" est exclue? Enfin, ce type de logique appartient généralement à l'application plutôt qu'à la base de données. Est-ce que ceci vraiment i> doit être fait au niveau SQL?
@Andrew Oui j'ai essayé quelques exemples que j'ai trouvés, mais rien ne me rend à la sortie que je veux. Vous êtes correct sur la photo est incorrect et il devrait être interrogé1 répété pour chaque année / mois active (ceci a été corrigé) pour répondre à votre dernière question, oui, cela doit être effectué au niveau SQL car il n'y a pas d'application au-dessus de il.
Bonjour et bienvenue à Stackoverflow. Veuillez éviter de poster des images de données ou de code ... surtout quand il s'agit d'une telle quantité d'informations à couper / coller, telles que dans votre question.
Nous ne pouvons pas répondre à cette question. Vous devez nous montrer le modèle de données complet (en tant que saisie) et la sortie attendue. Vous n'avez pas montré les entrées. Avec toute entrée possible, il existe un code possible qui créerait la sortie que vous décrivez. Veuillez poster le DDL complet de la table source. En outre, postez n'importe quel code que vous avez attendu à travailler, mais cela n'a pas fait ce que vous attendiez.
Je suggère une table de date ou une notification.
Merci pour les commentaires sur la publication.