registros - sumar valores de una columna sql
Agrupación de SQL por mes y año (5)
No estoy seguro de qué debo escribir en la siguiente consulta SQL para mostrar la columna de ''fecha'' como esta: "mes-año" - "9-2011".
SELECT MONTH(date) + ''.'' + YEAR(date) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN ''2001-11-3'' AND ''2011-11-3'')
GROUP BY MONTH(date), YEAR(date)
Entonces, lo que quiero hacer es cambiar los datos de la primera columna para mostrar el mes y el año en lugar de mostrar solo el mes.
En postgresql puedo escribir una consulta similar con una función de formato de fecha (to_char) y agrupar solo por fecha:
SELECT to_char (datum, ''MM-YYYY'') AS mjesec
FROM test
GROUP BY datum
ORDER BY datum;
Tal cosa es seguramente posible con SQL Server también, ¿no es así?
Si desea seguir teniendo el campo en el tipo de datos datetime, intente usar esto:
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, o.[date]), 0) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order] o
WHERE (idCustomer = 1) AND (o.[date] BETWEEN ''2001-11-3'' AND ''2011-11-3'')
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, o.[date]), 0)
También es fácil cambiar al grupo por horas, días, semanas, años ...
Espero que sea de utilidad para alguien,
¡Saludos!
Si entiendo correctamente. Para agrupar sus resultados según lo solicitado, su cláusula Group By debe tener la misma expresión que su declaración de selección.
GROUP BY MONTH(date) + ''.'' + YEAR(date)
Para mostrar la fecha como formato "mes-fecha", cambie "." a ''-'' La sintaxis completa sería algo como esto.
SELECT MONTH(date) + ''-'' + YEAR(date) AS Mjesec, SUM(marketingExpense) AS
SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN ''2001-11-3'' AND ''2011-11-3'')
GROUP BY MONTH(date) + ''.'' + YEAR(date)
Supongo que es MS SQL, ya que se parece a la sintaxis de MS SQL.
Así que debes poner en la línea de grupo lo mismo que en select ex:
Select MONTH(date)+''-''+YEAR(date), ....
...
...
...
group by MONTH(date)+''-''+YEAR(date)
SELECT CAST(MONTH(date) AS VARCHAR(2)) + ''-'' + CAST(YEAR(date) AS VARCHAR(4)) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN ''2001-11-3'' AND ''2011-11-3'')
GROUP BY CAST(MONTH(date) AS VARCHAR(2)) + ''-'' + CAST(YEAR(date) AS VARCHAR(4))
O como mencionó @ 40-Love, puedes lanzar con ceros iniciales:
GROUP BY
CAST(YEAR(date) AS VARCHAR(4)) + ''-'' + right(''00'' + CAST(MONTH(date) AS VARCHAR(2)), 2)