8
votes

Est-il possible d'utiliser la commande par colonne pas dans le groupe par?

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


0 commentaires

6 Réponses :


0
votes

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)


1 commentaires

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 ...



1
votes

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))


2 commentaires

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. :)



31
votes

Appliquer un autre agrégat, alors que diriez-vous; xxx


0 commentaires

0
votes

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


0 commentaires

0
votes

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


0 commentaires

1
votes

Utilisez ceci forte>

order by
1,2,3,4,5


0 commentaires