Hola Nicolas
Buenas tardes
Eso no funcionaria , si tenes sql server 2005 en adelante podes usar Rank(), te
paso la documentancion
https://docs.microsoft.com/en-us/sql/t-sql/functions/rank-transact-sql
Si tenes identificador único en tabla detalle, sino la clave que tengas la usas
en el partition by va la factura, y el order by voy a usar Det.IDarticulo,
Det.Cantidad como clave para el ejemplo espero que se entienda y te sirva.
Quedaría asi
RANK() OVER (PARTITION BY Det.Factura order by Det.IDarticulo, Det.Cantidad) as
id ,
Y quedaria asi
SELECT Det.IDarticulo, Det.Cantidad, Det.Precio,
--aqui va el campo para ver que carga este se puede obviar es solo para mostrar
como queda
RANK() OVER (PARTITION BY Det.Factura order by Det.IDarticulo,
Det.Cantidad) as IDDetalle,
--aqui va el campo de descuento
Case When RANK() OVER (PARTITION BY Det.Factura order by
Det.IDarticulo, Det.Cantidad) = 1
then Cab.Descuento
Else 0
End Descuento
FROM Detalle INNER JOIN Encabezado ON Det.Factura = Cab.Factura
WHERE CAB.Factura = '00015 '
Saludos
Martin M. Gamazo
Analista Programador
Sistemas y Desarrollo Tecnológico
La Rioja 301 (1214) Ciudad de Buenos Aires
Tel.: (+5411) 4956 9622 Int. 1461 | Directo: (+5411) 4956 9761
www.oca.com.ar<http://www.oca.com.ar/>
[firma-OCA-2015-cs3-01 - copia]
De: [email protected] [mailto:[email protected]] En nombre de Omar Bellio
Enviado el: miércoles, 19 de abril de 2017 14:59
Para: GUFA List Member
Asunto: [GUFA] OT sentencia SQL
Me imagino que si hicieras un engendro tal como, por ejemplo (asumiendo que la
tabla Detalle tenga un campo identificador propio, digamos idDetalle):
SELECT Det.IDarticulo, Det.Cantidad, Det.Precio,
Case
When Det.idDetalle = (select min(idDetalle) from
Detalle) then Cab.Descuento
Else 0
End Descuento
FROM Detalle INNER JOIN Encabezado ON Det.Factura = Cab.Factura
Order By Det.idDetalle
No lo probé pero supongo que esto o algo muy similar te daría el resultado que
estás buscando, pero la verdad es que yo tomaría el cursor una vez que lo tengo
dentro del fox y le haría una pasada para eliminar todos los valores que no me
interesan.
De: [email protected]<mailto:[email protected]> [mailto:[email protected]] En nombre
de Ariel Arrebola
Enviado el: miércoles, 19 de abril de 2017 09:08
Para: GUFA List Member
Asunto: [GUFA] OT sentencia SQL
Hola Nicolas, cambia en Inner por left
SELECT Det.IDarticulo, Det.Cantidad, Det.Precio, Cab.Descuento
FROM Detalle Det LEFT JOIN Encabezado Cab ON Det.Factura = Cab.Factura
saludos
El 15 de abril de 2017, 15:32, Nicolas Arnaldo
<[email protected]<mailto:[email protected]>> escribió:
Buenas tardes grupo, tengo un problema que no se como resolver en SQL.
Tengo dos tablas, maestro y detalles.
En una sentencia SQL (sql server) necesito devolver todos los items, y tambien
traer en un registro un valor del encabezado, sin que ese valor se repita.
Es decir, EJ.
Factura Articulo_Detalle Cantidad_Detalle Precio_Detalle Descuento_Encabezado
00015 C45 10 $150.50 $20
00015 C50 15 $220.75 $0
00015 C75 5 $750.15 $0
Si hago
SELECT Det.IDarticulo, Det.Cantidad, Det.Precio, Cab.Descuento
FROM Detalle INNER JOIN Encabezado ON Det.Factura = Cab.Factura
el descuento del encabezado se repite en todos los items, estoy tratando de
usar DISTINCT
pero no logro llegar al resultado deseado.
El importe de descuento lo deberia poner en cualquier item, no importa cual,
simplemente
con que figure el importe del encabezado una sola vez es suficiente.
Muchas gracias de antemano.
[https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif]<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
Virus-free.
www.avast.com<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>