Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Ayuda con un query

Estas en el tema de Ayuda con un query en el foro de SQL Server en Foros del Web. Hola es la primera vez que posteo en este foro aunque ya en varias ocaciones he encontrado aqui respuesta a algunos problemillas que he tenido. ...
  #1 (permalink)  
Antiguo 16/01/2009, 18:18
 
Fecha de Ingreso: enero-2009
Mensajes: 1
Antigüedad: 15 años, 3 meses
Puntos: 0
Pregunta Ayuda con un query

Hola es la primera vez que posteo en este foro aunque ya en varias ocaciones he encontrado aqui respuesta a algunos problemillas que he tenido. Mi pregunta es la siguiente:

tengo un tabla con la siguiente estructura:

ReservacionID | Cantidad | Descripcion | Fecha

0001 | -100.00 | Cargo xxxxx | 08/23/2008 00:00:00
0001 | 100.00 | Deposito xxxxx | 08/29/2008 00:00:00
0008 | -200.00 | Cargo yyyy | 09/15/2008 00:00:00
0012 | -300.00 | Cargo zzzz | 10/23/2008 00:00:00
0012 | 300.00 | Deposito zzzz | 10/23/2008 00:00:00
0020 | -400.00 | Cargo wwww | 10/20/2008 00:00:00


Me interesa hacer una consulta que me muestre solamente aquellos cargos que no tengan su correspondiente deposito (ej, las reservaciones 0008 y 0020). Ya tengo un par de días buscando la forma y la verdad es que no encuentro solución.


Mil gracias de antemano por sus sugerencias
  #2 (permalink)  
Antiguo 16/01/2009, 19:06
 
Fecha de Ingreso: enero-2009
Mensajes: 165
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Ayuda con un query

Hola, puede que haya una solución mejor, pero en mi opinión, deberías hacer dos tablas distintas una para cargos y otras para depósitos, una vez separadas te resultará mas fácil buscar los datos de una que no se encuentren en la otra
  #3 (permalink)  
Antiguo 16/01/2009, 19:20
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Ayuda con un query

Solo tienes que sacarlos por separado y luego utilizar un left join para obtener los ids no existentes en el primer conjunto.

No se cual es el campo que identifica cual es cargo y cual es abono asi que tome como cargo los menores a cero y abono los mayores a cero.

Tomarlo de la descripcion haria el proceso muy lento.

Aunque el query es al extenso, si la tabla tiene indice por ReservacionID no te pregara en el performance.

Código:
Select *
From  MiTabla M
Inner join
     (Select C.ReservacionID
      From (Select ReservacionID
            From   MiTabla
            Where  Cantidad < 0) C
      Left outer join
           (Select ReservacionID
            From   MiTabla
            Where  Cantidad > 0) D
      On    C.ReservacionID = D.ReservacionID
      Where D.ReservacionID is null) I
On M.ReservacionID = I.ReservacionID

Espero te sirva....

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 21/01/2009, 18:33
Avatar de michael_045  
Fecha de Ingreso: enero-2009
Mensajes: 13
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Ayuda con un query

Muchas veces nos toca trabajar con BD's ay creadas y no le podemos hacer modificaciones debido a que el usuario no lo permite, a lo k voy es k muchas veces no nos toca hacer la normalizacion de la BD y tenemos k trabajar con lo k se tiene, si tu tabla y los datos se guardan como en el ejmplo k pones, tal vez este query te pueda sacar de apuros

----------------------
<h1>
select ReservacionID from cargosDeposito group by ReservacionID having count(ReservacionID)=1
</h1>
---------------------

Espero k este ejemplo te sirva.

Salu2.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:38.