Comme le titre dit, voici mon code:
SELECT material, SUM([Amount]) AS [Amount], RIGHT(CONVERT(varchar(50), [date_in], 106), 8) FROM [rec_stats] GROUP BY material, RIGHT(CONVERT(varchar(50), [date_in], 106), 8) ORDER BY material,date_in
6 Réponses :
Vous ne pouvez commander que par ce qui est possible d'utiliser dans une instruction SELECT. Date_in en soi n'est pas possible dans la déclaration de sélection afin que vous ne puissiez pas l'utiliser. Selon votre SGBDM, vous pouvez procéder comme suit:
SELECT material, SUM([Amount]) AS [Amount], RIGHT(CONVERT(varchar(50), [date_in], 106), 8) FROM [rec_stats] GROUP BY material, RIGHT(CONVERT(varchar(50), [date_in], 106), 8) ORDER BY material,RIGHT(CONVERT(varchar(50), [date_in], 106), 8)
Mais cela le ferait de la commander alphabétiquement car il a été converti en Varchar, j'en ai besoin d'être commandé à la date ...
Commander par la même expression que vous regroupez par.
Il est préférable de grouper et de commander sur la date code> de la représentation du mois. p>
in SQL Server 2008 CODE> Ce serait: P>
SELECT material, SUM([Amount]) AS [Amount], DATEADD(d, 1 - DAY(GETDATE()), CAST(GETDATE() AS DATE))
FROM [rec_stats]
GROUP BY
material,
DATEADD(d, 1 - DAY(GETDATE()), CAST(GETDATE() AS DATE))
ORDER BY
material, DATEADD(d, 1 - DAY(GETDATE()), CAST(GETDATE() AS DATE))
Mais cela le ferait de la commander alphabétiquement car il a été converti en Varchar, j'en ai besoin d'être commandé à la date ...
@Dreamer: C'est la beauté du format AAAA-MM-DD; Le commandement lexical est un ordre chronologique. :)
Appliquer un autre agrégat, alors que diriez-vous;
essayez-vous de regrouper en mois? Si tel est le cas, essayez:
SELECT material, SUM([Amount]) AS [Amount], DATEPART(year, [date_in]) as y, DATEPART(month, [date_in]) as m, DATEPART(month, [date_in]) + ' ' + DATEPART(year, [date_in]) AS MonthYearCombined FROM [rec_stats] GROUP BY material, DATEPART(year, [date_in]), DATEPART(month, [date_in]) ORDER BY material,y,m
Vous ne pouvez pas gérer la colonne Date_in comme votre requête d'origine. Plutôt, vous pouvez nier la requête et le lire comme ceci:
SELECT material, SUM([Amount]) AS [Amount], RIGHT(CONVERT(varchar(50), [date_in], 106), 8) FROM ( Select material, Amount, RIGHT(CONVERT(varchar(50), [date_in], 106), 8) as DateIn From [rec_stats] ) X GROUP BY material, DateIn ORDER BY material,DateIn
Utilisez ceci forte>
order by
1,2,3,4,5