2011-04-28 11 views
7

como el título dice, aquí está mi código: no¿es posible usar la columna ORDER BY no en GROUP BY?

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 

el código no funcionarán debido a la date_in, es de todos modos para evitar esto?

Respuesta

19

Aplicar otro agregado, así que ¿qué;

order by min([date_in]) 
+1

me pregunto por qué no pensé en eso ... ¡Gracias! :RE – dreamer

0

Solo puede ordenar por lo que es posible usar en una declaración de selección. Date_in por sí mismo no es posible en la declaración de selección, por lo que no puede usarlo. Según su RDBMS, puede hacer lo siguiente:

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

pero eso sería hacer que se ordene alfabéticamente, ya que se ha convertido en varchar, lo necesito para ser ordenado por la fecha ... pero eso – dreamer

1

Ordene por la misma expresión que está agrupando.

Es mejor agrupar y ordenar en la representación DATE del mes.

En SQL Server 2008 que sería:

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

haría que lo ordenara alfabéticamente porque se había convertido en varchar, necesito que se ordene por fecha ... – dreamer

+0

@dreamer: esa es la belleza del formato aaaa-mm-dd; orden léxico es ordenamiento cronológico. :) –

0

¿Está intentando agregar por mes? Si es así, trate de:

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 

Nota: Puede que tenga que convertir los valores en la columna "MonthYearCombined" - De hecho, me recomendaría usted que en el código en lugar de SQL, pero quería incluir alguna referencia a ella.

0

No puede tratar la columna date_in como su consulta original. Más bien, puede anidar la consulta y leer así:

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 

no puedo probarlo en mi entorno de desarrollo, pero creo que esto le da la idea.

0

uso de este

order by 
1,2,3,4,5