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.-