Como agrupar por mes para que me de el resultado de las facturas
Me gustaría agrupar un campo en una consulta y además ordenarlo por mes.
Mi problema es que cuando realizo la consulta de dos tablas una llamada meses con los campos (numeromes, mes) y la otra lugar con los campos (mes, año, nº factura, concepto importe, id) cuando realizo la consulta lo que quiero es agrupar por mes y ordenar por numero de mes. Hasta aquí todo bien pero el problema viene cuando en la siguiente consulta quiero sacar comprobar las facturas del mes seleccionado y en algunos meses tengo mas de una factura.
La consulta es la siguiente
select ano, n_factura, lugar.mes, meses.numeromes from meses inner join lugar on meses.mes = lugar.mes where ano='"&a&"' group by lugar.mes, ano, n_factura, meses.numeromes order by meses.numeromes
Pero no me deja agrupar por mes ya que tengo meses con mas de una factura.
Pero no me deja agrupar por mes ya que tengo meses con más de una factura. <- Tienes que tener claro que los campos por los cuales están agrupando son distintosasi como el campo por que agrupas es n_factura <- este es diferente por eso te regresa varios valores en lugar de 1 como tal.
Adjunto algunas consultas, estas son pruebas propias
Ejemplo 1
Selectano, lugar. Mes, meses. Numeromes,count(n_factura) frommesesinnerjoinlugar
on meses.mes = lugar.mes where ano='2014' group by lugar.mes, ano, meses.numeromes order by meses.numeromes
Ejemplo 2
Selectano, meses. Numeromes,count(n_factura)frommesesinnerjoinlugar
on meses.mes = lugar.mes where ano='2014' group by ano, meses.numeromes order by meses.numeromes
El problema que tengo es que quiero que se agrupe por mes y me dé el valor de las facturas por cada mes.
Tal y como me has indicado me sale error ADODB.Recordset error '800a0cc1'
No se si me he explicado correctamente, por si acaso te envío código para que le eches un vistazo.
El código es el siguiente:
<%@language="vbscript"%>
<% option explicit
response.buffer %>
<html>
<head>
<title>contabilidad de gastos</title>
<style type="text/css" media="print">
#imprime {display:none}
</style>
<center>
<font color=blue size=+5>
<b>informe de gastos</b>
</font>
</center>
</head><hr><br>
<center>
<body bgcolor="#f3e2a3">
<table border=0>
<tr>
<td>
<% dim m,a,conex,rs,sqltext
m=request.form("mes")
a=request.form("ano")
set conex=server.createobject("adodb.connection")
conex.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("./bd/contabilidad.mdb")%>
<table align=center border=0>
<tr>
<td>
<font size=+3><b>consulta</b>
</font>
</td>
</tr>
</table><br>
<% set rs=server.createobject("adodb.recordset")
sqltext="select ano, n_factura, lugar.mes, meses.numeromes from meses inner join lugar on meses.mes = lugar.mes where ano='"&a&"' group by lugar.mes, ano, n_factura, meses.numeromes order by meses.numeromes;"
set rs=conex.execute(sqltext)
if not rs.eof then %>
<table align=center border=1>
<tr><%do while not rs.eof%>
<th align=center width="120" bgcolor="#00aaaa">
<font size=+3>año
</font>
</th>
<td align=center width="120">
<font size=+3><%response.write rs("ano")%>
</font>
</td>
</tr>
</table><br><br>
<table align=center border=1>
<tr>
<th colspan="2" bgcolor="#00aaaa">
<font size=+2>mes
</font>
</th>
</tr>
<tr><%do while not rs.eof%>
<td width="120" align=center>
<%response.write rs(("mes"))%>
</td>
<td align=center>
<button type="submit" style="width:auto;height:36px;font-size:10pt;background:#c0c0c0;border-radius:8px;" onclick="location.href='editar5.asp?action=editar5&mes=<%= rs("n_factura")%>'">
<img src='editar3.png' align='absmiddle' hspace='4'/>consultar
</button>
</td>
</tr><% rs.movenext
loop %>
</table><br>
<table align=center cellspacing="4" cellpadding="8" border=0>
<tr>
<td>
<button type="submit" id="imprime" style="width:auto;height:36px;font-size:10pt;background:#c0c0c0;border-radius:8px; "onclick="location.href='mensual.html'">
<img src="ok.png" align="absmiddle" hspace='4'/> aceptar
</button>
</td>
</tr>
</table>
<% loop
end if
rs.close
conex.close
set rs=nothing
set conex=nothing %>
</td>
</tr>
</table>
</body>
</center>
</html>
El código del resultado es
<%@language="vbscript"%>
<% option explicit %>
<html>
<head>
<title>contabilidad</title>
<table align=center width=40% bgcolor=#f1f1f1 cellpadding="0" cellspacing="0" border=3>
<tr align=center>
<td>
<font color=black size=+5 face="verdana">
gastos
</font>
</td>
</tr>
</table><p>
</head><hr>
<body>
<table align=center border=0>
<tr>
<td>
<% dim conex,sqltext,rs,m,a
a=request.form("ano")
m=request.form("mes")
set conex=server.createobject("adodb.connection")
conex.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath ("./bd/contabilidad.mdb")%>
<table align=center cellspacing="6" cellpadding="2" border=0>
<tr align=center>
<td align=left><font color=blue size=+3 face="verdana"><u>datos obtenidos</u></font>
</td>
</tr>
</table><br>
<% set rs=server.createobject("adodb.recordset")
sqltext="select * from lugar where n_factura='"&request("mes")&"' ;"
set rs=conex.execute(sqltext)
if not rs.eof then %>
<table align=center border=1>
<tr><%do while not rs.eof%>
<th width="100" bgcolor="#00ccdde">
<font size=+2>aÑo
</font>
</th>
<td width="140" align=center>
<font size=+2><%response.write rs("ano")%>
</font>
</td>
</tr>
<tr>
<th bgcolor="#00ccdde">
<font size=+2>mes
</font>
</th>
<td align=center>
<font size=+2><%response.write rs("mes")%>
</font>
</td>
</tr>
</table><br>
<table align=center border=1 >
<tr align=center bgcolor="#00ccdd">
<th width="150">nº factura
</th>
<th width="140">concepto
</th>
<th width="100">importe
</th>
</tr>
<tr><% do while not rs.eof %>
<td align=center><%response.write rs("n_factura")%>
</td>
<td align=center><%response.write ucase(rs("concepto"))%>
</td>
<td align=center><%response.write formatnumber(rs("importe"),2)%> €
</td>
</tr>
</table><br>
<table align=right border=1>
<% set conex=server.createobject("adodb.connection")
conex.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("./bd/contabilidad.mdb")
set rs=server.createobject("adodb.recordset")
sqltext="select sum(importe) as total from lugar where n_factura='"&request("mes")&"' ;"
rs.open sqltext,conex,1 %>
<tr>
<td align=center width="100" bgcolor="#ff2222">
<font size=+2>total
</font>
</td>
<td align=center width="100">
<font size=+2><%response.write formatnumber(rs("total"),2)%> €
</font>
</td>
</tr><% rs.movenext
loop %>
</table><br><br><br>
<form method="get" action="mensual.html" >
<table align=center cellspacing="6" cellpadding="2" border=0>
<tr>
<td>
<button type="submit" style="width:auto;height:36px;font-size:10pt;background:#c0c0c0;border-radius:8px; "onclick="location.href='mensual.html'">
<img src="ok.png" align="absmiddle" hspace='4'/> aceptar
</button>
</td>
</tr>
</table><br>
<% loop
end if
conex.close
set conex=nothing %>
</form>
</td>
</tr>
</table>
</body>
</html>
Muchas gracias por tu tiempo y ayuda.
Un saludo
n_factura='"&request("mes")&"' <- En esta parte capturas el mes y a su vez lo filtras ?????
sqltext="select sum(importe) as total from lugar where n_factura='"&request("mes")&"' ;"
sqltext="select * from lugar where n_factura='"&request("mes")&"' ;" <- no veo en las consultas la agrupación
<% set rs=server.createobject("adodb.recordset")
sqltext="select ano, n_factura, lugar.mes, meses.numeromes from meses inner join lugar on meses.mes = lugar.mes where ano='"&a&"' group by lugar.mes, ano, n_factura, meses.numeromes order by meses.numeromes;"
set rs=conex.execute(sqltext)
if not rs.eof then %> <- en esta consulta la solución es la respuesta anterior.
Tal y como me has indicado me sale error ADODB. Recordset error '800a0cc1' <- y en esta parte
select ano, n_factura, lugar.mes, meses.numeromes from meses inner join lugar on meses.mes = lugar.mes where ano='2014' group by lugar.mes, ano, n_factura, meses.numeromes order by meses.numeromes; <- consulta que tu manejas
Consulta que te sugeri
select ano,lugar.mes,meses.numeromes,
count(n_factura)//En esta parte tienes que asignarle el
//nombre de la columna ( as aliasColumnaTable)
from meses inner join lugar
on meses.mes = lugar.mes where ano='2014' group by lugar.mes, ano, meses.numeromes order by meses.numeromes
La agrupación ha funcionado perfectamente tal y como me has indicado pero la idea es que una vez agrupado, en otra ventana me muestre las facturas con su importe y el total del mes de esas facturas, pero no sale nada.
Perdona por no haber sido mas claro.
Muchas gracias.
Me gustaría obtener las facturas por el mes seleccionado después de haber agrupado por mes ya que no me da ningún resultado.
Gracias
select ano,lugar.mes,meses.numeromes,
count(n_factura) as FacturasTotal
from meses inner join lugar
on meses.mes = lugar.mes where ano='2014' group by lugar.mes, ano, meses.numeromes order by meses.numeromes <- Ya tienes la primera parte conoces el numero de facturas por año, registros etc.
Con atención al numero de facturas por mes, ya tienes la pauta para realizar la consulta.
Ahora bien, solo como observación en la consulta agrupas información cerrada es decir obtienes totales, ya conoces el total de facturas ahora para la segunda parte requieres la consulta como tal de la información que es diferente
select NombreCampos from NombreTableFacturasImporte
Como bien me indicas ya tengo el nº de facturas totales por cada mes y al hacer la consulta <select * from lugar where mes='"&request("n_factura")&> el resultado que me da es una única factura conociendo que en ese mes hay mas de una factura y el importe total que me extrae es la suma del mismo mes de todos los años, es decir la suma del mes de enero del 2010+2011+2013,etc..
No se donde puede estar el error, tal vez este en el filtro para hacer la segunda consulta <ONCLICK="location.href='editar5.asp?action=editar5&n_factura=<%= rs("mes")%>'"> Quizás se puedan filtrar los datos de otra modo porque ya no se que mas probar.
Muchísimas gracias por tu tiempo y perdona por ser tan pesado, pero es realmente importante la obtención de los datos.
Gracias y un saludo.
<ONCLICK="location.href='editar5.asp?action=editar5&n_factura=<%= rs("mes")%>'"> <- El filtro que realizas es por numero de factura mas no por mes.
<select * from lugar where mes='"&request("n_factura")&>
<- ¿Recuperas por GET o POST?, pienso que debes de asignar el nombre de la variable de acuerdo a su función como tal.
No tengo mayor inconveniente en seguirte asesorando.
Soy novato en todo esto y no sé que quieres decirme. Te importaría indicarme que es lo que lo que estoy haciendo mal y que debo hacer siguiendo las páginas que he enviado y como debo hacerlo ya que estoy muy perdido.
Por cierto recupero por GET
Muchas gracias y un saludo.
La agrupación y la cantidad de facturas por mes sale correctamente, pero cuando quiero consultar los números de las facturas en la siguiente página no me muestra nada.
Gracias.
Desde tu página inical. ESTADO.ASP
f=request.form("n_factura") <- No recives ninguna informacion de esta variable.
<%response.write("<a href=editar.asp?facturas=" & f & " >
<button type='submit' style='width:auto;height:36px;font-size:10pt;background:#c0c0c0;border-radius:8px;'>
<img src='editar3.png' align='absmiddle' hspace='4'/>Consultar</button></a>")
response.write( "Valoe entrada= " + f )
%>
- Compartir respuesta