on 02-24-2010 7:10 PM
BUenas Tardes:
Tengo el siquiente query:
SELECT * FROM (
SELECT distinct T0.Cardcode' ' T0.Cardname 'Cliente', sum(T0.DocTotal) 'Venta Crèdito' ,0 as Cancelaciones FROM OINV T0 group by T0.Cardcode,T0.Cardname
union all
SELECT T0.Cardcode' ' T0.Cardname, 0,SUM(T0.DocTotal) FROM ORIN T0 GROUP BY T0.Cardcode,T0.Cardname
) AS T88
mi problema esta en que quiero que la columna de cancelaciones que tienen valores me aparezca a un lado de la columna de Ventas crédito correspondiente al cliente ; es decir:
Cliente Ventas Crédito Cancelaciones
01 Claudia 12000 100
y ahorita me aparece de la siguiente forma:
Cliente Ventas Crédito Cancelaciones
01 Claudia 12000 0
01 Claudia 0 100
Gracias!
Hola.
No debes utilizar Union All en la consulta para que no salgan las devoluciones en filas aparte.
Para la columna donde deben ir las devoluciones colocas una subconsulta que traiga le valor requerido.
Además es mejor restringir el informe a un rango de fechas. Algo así:
SELECT T10.Cliente, SUM(T10.DocTotal) as 'Ventas', SUM(T10.Devoluciones) as 'Devoluciones'
FROM
(
SELECT (T0.CardCode + ' ' + T0.CardName) as Cliente, T0.DocTotal,
'Devoluciones'=(SELECT SUM(T1.LineTotal) FROM RIN1 T1 WHERE T1.BaseEntry = T0.DocEntry)
FROM OINV T0
WHERE T0.DocDate BETWEEN '[%0]' AND '[%1]'
) T10
GROUP BY T10.Cliente
ORDER BY T10.Cliente
Respecto a la factura, ¿no deberías tomar el subtotal antes de impuestos y retenciones?.
Espero sea de ayuda.
Saludos.
Edited by: Hector Daniel Hernandez Bacca on Feb 24, 2010 2:56 PM
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hola:
La consulta que me pones me marca errores en el from, la verdad no entendi bien que es lo que estas haciendo? Yo lo que quiero es traer la facturación en una columna y las notas de crédito en otra columna. No tendría que ocupar la table ORIN, de las fechas voy de acuerdo que es mejor en intervalo de fechas, pero no logro correr la consulta que me proporcionas.
Gracias
Hola.
¿Copiaste y pegaste la consulta tal cual está en el post?. Aquí corre bien.
La consulta hace lo que estás pidiendo:
- en la col DocTotal trae el toal del documento tal como lo tenías.
- en la col Devoluciones, la subconsulta suma las líneas de las Notas Crédito que tienen como documento base la factura.
Se desarrolla en dos etapas, de manera similar como lo planteaste al principio:
- en la primera etapa se relacionan las facturas con el total de devoluciones con NC.
- en la segunda, se totalizan las facturas y devoluciones por cada cliente (SN).
Hará falta pulirla un cpoco más, de acuerdo a lo que necesites. Por ejemplo lo que te pregunté respecto al subtotal con descuentos y antes de impuestos y retenciones.
Las notas crédito se enlazan a las facturas por las líneas del documento, por eso uso la tabla RIN1 (líneas de documento) y no ORIN (encabezado del documento).
Aquí va de nuevo, con menos espacios:
SELECT T10.Cliente, SUM(SubTotFac) as Venta, SUM(T10.Devoluciones) as Devolucion
FROM
(
SELECT (T0.CardCode + ' ' + T0.CardName) as Cliente, T0.DocNum, T0.DocTotal,
SubTotFac=(T0.DocTotal+WTSum-VatSum+DiscSum),
'Devoluciones'=(SELECT SUM(T1.LineTotal) FROM RIN1 T1 WHERE T1.BaseEntry = T0.DocEntry)
FROM OINV T0
WHERE T0.DocDate BETWEEN '20100101' AND '20100131'
) T10
GROUP BY T10.Cliente
ORDER BY T10.Cliente
Quedo en espera de tus comentarios.
Saludos.
Edited by: Hector Daniel Hernandez Bacca on Feb 24, 2010 5:40 PM
Hola.
Cuando reemplazas las fechas fijas por variables de entrada, sucede el error que mencionas.
Para que funcione bien copia y pega este código:
/* SELECT FROM [dbo].[OINV] P0 */
DECLARE @F1 AS DATETIME
/* WHERE */
SET @F1 = /* P0.DocDate */ '[%0]'
/* SELECT FROM [dbo].[OINV] P1 */
DECLARE @F2 AS DATETIME
/* WHERE */
SET @F2 = /* P1.DocDate */ '[%1]'
SELECT T10.Cliente, SUM(SubTotFac) as Venta, SUM(T10.Devoluciones) as Devolucion
FROM
(
SELECT (T0.CardCode + ' ' + T0.CardName) as Cliente, T0.DocNum, T0.DocTotal,
SubTotFac=(T0.DocTotal+WTSum-VatSum+DiscSum),
'Devoluciones'=(SELECT SUM(T1.LineTotal) FROM RIN1 T1 WHERE T1.BaseEntry = T0.DocEntry)
FROM OINV T0
WHERE T0.DocDate BETWEEN @F1 AND @F2
) T10
GROUP BY T10.Cliente
ORDER BY T10.Cliente
Así debe correr bien.
Me cuentas cómo te va.
Saludos.
User | Count |
---|---|
108 | |
12 | |
11 | |
6 | |
5 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.