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.

1 respuesta

Respuesta
-1

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&ntilde;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&#209;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&#186; 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)%> &#8364;
       </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)%> &#8364;
        </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.

Envíame tus archivos fuente incluida tu base de datos.

[email protected]

Aun no eh recibido tu correo.

[email protected]

Te lo he enviado el lunes pero te lo reenvío otra vez.

Gracias.

No viene el archivo con el fuente que pegaste en esta página.

He hecho unas modificaciones, pero si quieres te mando el código fuente que puse

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 )

%>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas