SQL Insérer dans une variable de table en tant qu'alias

Nouveau dans l'alerte SQL!

J'ai déclaré une variable de table et fait une norme

Insert into @table ( columns ) select (acquired data result) 

J'ai l'intention de faire une comparaison annuelle des données par mois (par exemple comparer datatables pour avril de cette année et des dernières années). Puisque je ne veux pas créer une table séparée avec la même structure à less que je ne doive absolument le faire, voici ma question:

Est-il possible d'insert différents sets de données dans la même table temporaire que des alias pour faire la distinction entre les deux?

Comme, par exemple

 (Insert into @table ( columns ) select (acquired data 1 result)) as alias1 

et

 (Insert into @table ( columns ) select (acquired data 2 result)) as alias2 

Dans le but déclaré de comparer datatables d'un mois au même mois de l'année précédente … vous pouvez utiliser des expressions de table communes au lieu de variables de table.

par exemple

 ;with PriorYear as ( select ... from ... where ... ) , CurrentYear as ( select ... from ... where ... ) select ... from PriorYear inner join CurrentYear on ... 

Il y a peut-être beaucoup plus de moyens que cela, cela dépend du genre de comparaisons et des opérations que vous faites.

Et si vous avez plus d'une ligne dans une variable de table, il vaudrait probablement mieux utiliser des tables temporaires réelles plutôt que des variables de table.

Référence:

  • Quelle est la différence entre une table temporaire et une variable de table dans SQL Server? – Réponse de Martin Smith
  • Quand devrais-je utiliser une table variable par rapport à une table temporaire dans un server sql? – Réponse de Martin Smith

Si vous voulez comparer un mois de données à tous les mois de l'année passée, il vous suffit d'un champ d'horodatage que vous pouvez regrouper par année et filterr par mois. Vous pouvez utiliser ce qui suit pour correspondre à votre exemple.

 SELECT COUNT(*) AS [SomeAggregateFunction] , DATEPART(YEAR, [myTimestamp]) AS [Year] FROM [myTable] WHERE DATEPART(MM, [myTimestamp]) = 12 GROUP BY DATEPART(YEAR, [myTimestamp]) 

Cela affichera uniquement les résultats de "Décembre" et regroupera les informations par année. Vous pouvez utiliser n'importe quel type de fonction d'agrégat pour get des informations utiles telles que "SUM ()" ou "MAX ()" au lieu de "COUNT (*)". Un bon exemple de quand cela serait utile est de déterminer le montant des commands qui ont été passées chaque année dans un certain mois ou quelque chose. Ou si vous vouliez get une sum du montant des ventes effectuées chaque mois de décembre. Il suffit de l'éditer comme bon vous semble. Si vous avez besoin d'aide, n'hésitez pas à commenter.