Filtrar por el alias de una subconsulta en sql
Espero que me puedas ayudar te explico : esta es mi consulta SQL “saldo anterior” donde me permite visualizar todos los saldos de depósitos a una fecha determina por ejemplo
deposito 123 01/09/2014 monto 2500.00 pago fact 1 01/09/2014 500.00 saldo al 01/09/2014 2000.00
deposito 123 01/09/2014 monto 2500.00 pago fact 2 03/09/2014 400.00 saldo al 03/09/2014 1600.00
deposito 123 01/09/2014 monto 2500.00 pago fact 3 10/09/2014 1600.00 saldo al 10/09/2014 0.00
si filtro todos los saldos de los depósitos al 03/09/2014 me tendría que salir 1600.00 tomando este ejemplo el depósito ya esta cancelado el 10/09/2014 , el problema está en que si quiero filtrar el saldo pendiente al 03/09/2014 el filtro no me jala ese depósito ya que filtra por el saldo pero el saldo es 0.00 actualmente lo lógico sería filtrarlo por subconsulta “saldo” pero sé que no se pueden filtrar por alias pero es el único campo que me filtra el saldo a una fecha determinada correctamente como podría filtrar los saldos pendientes a una fecha determinada me puedes ayudar por favor .
Estos datos los cargo en un datagridview que esta paginado así sean 100,000.00 no habría problemas cargaría rapido .
Gracias
Dim cmd As New OleDb.OleDbCommand("SELECT DEPOSITOS.Iddeposito as [ID_DEP], DEPOSITOS.activo AS [ACT], DEPOSITOS.estado AS [E], ESTACIONES.nomestacion AS [EESS], DEPOSITOS.formadepago AS[F_PAGO], DEPOSITOS.codbanco AS [BCO], mid(DEPOSITOS.fechaconfirmacion,1,10) AS [F_CONFIR], mid(DEPOSITOS.fechadedeposito,1,10) AS [F_DEP], mid(DEPOSITOS.fechaparte,1,10) AS [F_PARTE], DEPOSITOS.numerodeoperacion AS [OP], DEPOSITOS.cheque AS [CHQ], DEPOSITOS.moneda AS [M], DEPOSITOS.tipodecambio AS [TC], DEPOSITOS.montodeposito AS [MONTO] ,
(SELECT IIf(IsNull(SUM(DETALLEDEPOSITOS.cancelado)), 0, SUM(DETALLEDEPOSITOS.cancelado)) FROM DETALLEDEPOSITOS WHERE DETALLEDEPOSITOS.Iddeposito = DEPOSITOS.Iddeposito AND DETALLEDEPOSITOS.fechacancel >= @desde and DETALLEDEPOSITOS.fechacancel <= @hasta ) as [CONSUMO],
iif(M='S',(MONTO - (SELECT IIf(IsNull(SUM(DETALLEDEPOSITOS.cancelado)), 0, SUM(DETALLEDEPOSITOS.cancelado)) FROM DETALLEDEPOSITOS WHERE DETALLEDEPOSITOS.Iddeposito = DEPOSITOS.Iddeposito and DETALLEDEPOSITOS.fechacancel >= @desde AND DETALLEDEPOSITOS.fechacancel <= @hasta )),((MONTO*TC)-(SELECT IIf(IsNull(SUM(DETALLEDEPOSITOS.cancelado)), 0, SUM(DETALLEDEPOSITOS.cancelado)) FROM DETALLEDEPOSITOS WHERE DETALLEDEPOSITOS.Iddeposito = DEPOSITOS.Iddeposito and DETALLEDEPOSITOS.fechacancel >= @desde AND DETALLEDEPOSITOS.fechacancel <= @hasta ))) AS [SALDO],
CLIENTES.tipocliente AS [T_CLI], GRUPOS.nomgrupo AS [GRUPO], CLIENTES.ruc AS [RUC], CLIENTES.razonsocial AS [CLIENTE] FROM GRUPOS INNER JOIN (CLIENTES INNER JOIN (ESTACIONES INNER JOIN DEPOSITOS ON ESTACIONES.idestacion = DEPOSITOS.idestacion) ON CLIENTES.idcliente = DEPOSITOS.idcliente) ON GRUPOS.idgrupo = CLIENTES.idgrupo WHERE DEPOSITOS.formadepago like '%" & txtforma.Text.Trim & "%' AND DEPOSITOS.codbanco like '%" & TXTidbanco.Text & "%' AND DEPOSITOS.numerodeoperacion like '%" & TXToperacion.Text.Trim & "%' and CLIENTES.tipocliente like '%" & CMBtipo.Text.Trim & "' AND GRUPOS.idgrupo like '%" & TXTidgrupo.Text & "%' and CLIENTES.ruc like '%" & TXTruc.Text.Trim & "%' and CLIENTES.razonsocial like '%" & TXTclientes.Text.Trim & "%' and DEPOSITOS.idestacion like '%" & TXTidestacion.Text.Trim & "%' and DEPOSITOS.activo like '%" & CMBactivo.Text & "%' and DEPOSITOS.cheque like '%" & TXTcheque.Text & "%' and DEPOSITOS.moneda like '%" & mon & "%' and DEPOSITOS.fechadedeposito >= @desde and DEPOSITOS.fechadedeposito <= @hasta and SALDO > 0 order by DEPOSITOS.fechadedeposito,ESTACIONES.nomestacion asc", Cn)
cmd.Parameters.AddWithValue("@hasta", hasta)
Dim da As New OleDb.OleDbDataAdapter(cmd)
da.Fill(ds, "Items")
dtSource = ds.Tables("Items")