Que tal Alejandro:
 
 
Si los comprobantes son un numero pequeño y limitado, podés 
“trasponer” el resultado haciendo uso de la instrucción Case.
 
Ejemplo:
 
Comprobante1 = case when Comprobante_tipo=1 then valor_Comprobante1 else 
null end, 
 
Comprobante2 = case when Comprobante_tipo=1 then null
                                 When Comprobante_tipo=2 then 
valor_Comprobante2 else null end, 
 
Comprobante3 = case when Comprobante_tipo=1 then null
                                 when Comprobante_tipo=2 then null
                                 when Comprobante_tipo=3 then 
valor_Comprobante3 else null end
 
group by idComprobante
 
 
de esta manera te quedaria el Detalle en una sola fila, donde los conceptos 
quedarian encolumnados
y con el "case" controlarías cuando debe exponerse el concepto y cuando no, 
la precedencia viene dada por el orden en que se escriben las condiciones en 
el case. Obviamente se expondria el concepto solo si existe. Caso contrario 
queda NULL
 
El inconveniente de este esquema es que los tipos de comprobantes estan 
“hardcodeados” y si se agregan nuevos tipos hay que ajustar la consulta.
Ademas si hay muchos tipos de comprobantes la consulta y la tabla resultado 
seria demasiado grande.
 
 
Otra solucion alternativa:
 
Decis que solo debes recuperar “1 fila de detalle”.
Entonces si los comprobantes tiene un numero de precedencia, podes 
ordenarlos.
Si podes ordenarlos, despues podes generarle una secuencia (identity) y 
quedarte siempre con la menor id de cada lote de detalle.
 
Saludos
 
Daniel
 
 
 
 
 
 
-----Mensaje original-----
De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Alejandro A. 
ALEKSICH
Enviado el: Lunes, 14 de Enero de 2008 09:00 a.m.
Para: Daniel Aisenberg
Asunto: [dbms] Consulta NO Union o NOT Exists
 
Buenas, debo hacer una consulta contra un SQL 2000 para recuperar filas de 
la cabecera y 1 del detalle donde los registros del detalle cumplen 
determinada condición, y en otra consulta donde los registros de la misma 
tabla detalle cumplen otra condición. Estos es: Cabecera comprobante y 
detalle de pago
El tema es que existencia un orden de precedencia y exclusión. Si en el 
pago existe algún valor de pago de banco ya no importa el resto, caso 
contrario recupero los que contienen tarjeta, caso contrario recupero los 
que contienen efectivo y luego el resto.
O sea, si un comprobante fue abononado con un valor de pago de banco ese 
comprobante ya no debe aparecer en la segunda consulta por más que cumpla 
con la 2º condición,  si un comprobante aparece en la 2 consulta ya no 
debe aparecer en la 3º por más que cumpla con la condición de esa, y así 
sucesivamente.
En mi entender sería como una "NO" UNION que en lugar de unir las filas 
"reste" las duplicadas. Lo pensé por el lado de NOT EXISTS, pero no se me 
prendió la lamparita….
Alguna idea de cómo hacerlo? 
Gracias.- 
 

Responder a