Retroceder   Foros del Web > Programación para sitios web > .NET

Respuesta
 
Herramientas Desplegado
Antiguo 19-may-2005, 10:05   #1 (permalink)
Bravenap está en el buen camino
 
Avatar de Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 1.903
Enviar un mensaje por Skype™ a Bravenap
Agrupar filas por meses en un DataTable

Muy buenas de nuevo. Sigo dándole vueltas al mismo rollo de toquetear los DataTable. Bien, una vez conseguida una tabla con estos campos: Fecha, Factura e Importe me gustaría obtener otra en la que apareciera la suma de importes de cada mes. He probado directamente con esta cadena de selección de la base de datos:

Código:
SELECT Sum(Importe) FROM Tabla GROUP BY MONTH(CDATE(Fecha))
Y obtengo una fila para cada mes pero me agrupa los todos los meses iguales sin hacer distinción entre el año, es decir, suma todas las facturas de los meses de enero de 2000, 2001, .... dando una sola fila.

Esto otro no resultó

Código:
SELECT Sum(Importe) FROM Tabla GROUP BY (MONTH(CDATE(Fecha)) AND YEAR(CDATE(Fecha)))
Me devuelve una suma de todo.

Podría utilizar un filtro de la DataTable o DataView pero con el tema de las fechas es muy tedioso, pues, entre otras cosas no puedo usar la función Month() en el filtro.

¿Alguna idea?

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Bravenap está desconectado   Responder Citando
Antiguo 19-may-2005, 10:15   #2 (permalink)
DotNetDeveloper está en el buen camino
 
Fecha de Ingreso: abril-2003
Mensajes: 607
Pues tu idea en la consulta esta bien, lo que no se es si funcione, hasta donde yo se debería ser así:

SELECT Sum(Importe) FROM Tabla GROUP BY (MONTH(CDATE(Fecha)), YEAR(CDATE(Fecha)))
DotNetDeveloper está desconectado   Responder Citando
Antiguo 19-may-2005, 10:27   #3 (permalink)
Bravenap está en el buen camino
 
Avatar de Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 1.903
Enviar un mensaje por Skype™ a Bravenap
mmmmmm.....

Me dice que hay un error de sintaxis en la coma.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Bravenap está desconectado   Responder Citando
Antiguo 19-may-2005, 10:29   #4 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.552
Enviar un mensaje por MSN a RootK
Que BD estas usando ? porque si es MSSQL solo basta con que lo hagas así: (sin el CDate)

Cita:
select Sum(Importe)
from Tabla
group by month(Fecha)
Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .
RootK está desconectado   Responder Citando
Antiguo 19-may-2005, 10:36   #5 (permalink)
Bravenap está en el buen camino
 
Avatar de Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 1.903
Enviar un mensaje por Skype™ a Bravenap
no, estoy utilizando Access.

He cambiado la coma por un & y ya va bien, aunque tengo algunos otros problemillas. A ver si lo completo y lo pongo.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Bravenap está desconectado   Responder Citando
Antiguo 19-may-2005, 10:37   #6 (permalink)
Bravenap está en el buen camino
 
Avatar de Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 1.903
Enviar un mensaje por Skype™ a Bravenap
Se me olvidaba, tengo que usar CDate porque el campo es de texto, no de tipo fecha. Esto no lo puedo cambiar así que tengo que hacer obligatoriamente la conversión antes.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Bravenap está desconectado   Responder Citando
Antiguo 19-may-2005, 10:55   #7 (permalink)
Bravenap está en el buen camino
 
Avatar de Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 1.903
Enviar un mensaje por Skype™ a Bravenap
Bueno, pues ya está. Tengo que aplicar la función MAX(), aunque vale otra parecida, para que agrupe bien, puesto que no es suma ni cuenta. Os dejo el código completo:

Código:
strSel = "SELECT CSTR(MAX(MONTH(CDATE(FechaVisado)))) AS Mes, MAX(YEAR(CDATE(FechaVisado))) AS Año, COUNT(NumVisado) AS Visados, SUM(CDBL(CDBL(DerechosVisado)+CDBL(Legalizacion))) AS Importe FROM " & TablaBDInicial & " GROUP BY (MONTH(CDATE(FechaVisado)) & YEAR(CDATE(FechaVisado)))"
            Dim daResumen As New OleDbDataAdapter(strSel, con)
            Dim dtResumen As New DataTable
            daResumen.Fill(dtResumen)
            For Each f As DataRow In dtResumen.Rows
                f("Mes") = meses(Int16.Parse(f("Mes")) - 1) 'cambia el número de mes por el nombre del mes
            Next
            Dim dvResumen As New DataView(dtResumen)
            dvResumen.Sort = "Año, Mes"
            Me.dgInforme.DataSource = dvResumen
Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Bravenap está desconectado   Responder Citando
Antiguo 24-may-2005, 07:59   #8 (permalink)
Bravenap está en el buen camino
 
Avatar de Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 1.903
Enviar un mensaje por Skype™ a Bravenap
De vuelta con estos lios de tablas, una cuestión. Una vez obtenido un DataView al que se le aplica un orden de filas, me gustaría crear una nueva tabla que mentuviera ese orden. Estoy intentando esto, pero salta error en la línea roja. Dice que la fila ya pertenece a otra tabla:

Código:
            strSel = "SELECT CSTR(MAX(MONTH(CDATE(FechaVisado)))) AS Mes, MAX(YEAR(CDATE(FechaVisado))) AS Año, COUNT(NumVisado) AS Visados, SUM(CDBL(CDBL(DerechosVisado)+CDBL(Legalizacion))) AS Importe FROM " & TablaBDInicial
            strSel += " WHERE " & filtroFechas.ToString & filtroLega.ToString
            strSel += " GROUP BY (MONTH(CDATE(FechaVisado)) & YEAR(CDATE(FechaVisado)))"
            Dim daResumen As New OleDbDataAdapter(strSel, con)
            Dim dtResumen As New DataTable
            daResumen.Fill(dtResumen)
            For Each f As DataRow In dtResumen.Rows
                f("Mes") = meses(Int16.Parse(f("Mes")) - 1)
            Next
            Dim dvResumen As New DataView(dtResumen)
            dvResumen.Sort = "Año, Mes"
            Me.dgInforme.DataSource = dvResumen

            Dim dtOrdenada As DataTable
            dtOrdenada = dtResumen.Clone
            For i As Integer = 0 To dvResumen.Count - 1
                Dim nFila As DataRow = dtOrdenada.NewRow
                nFila = dvResumen.Item(i).Row
                Try
                    dtOrdenada.Rows.Add(nFila)
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
            Next
            ds.Tables.Clear()
            ds.Tables.Add(dtOrdenada)
Gracias de nuevo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Bravenap está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 09:15.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93