Unir querys facturas de deudores

Buenos días colegas,

Favor quien pueda orientarme como unir estas 3 consultas, en una sola.

La idea es mostrar 4 columnas: Nombre, no vencido, vencido, total (vencido y no vencido). Y ordenarlo por la columna total.

Saludos.

Has utilizado sub consultas ?? Documéntate un poco sobre ello, creo que será de ayuda para solucionar tu necesidad.

Saludos.

hola @pcarrasco no lo he utilizado. Algun link de recomendacion?

Gracias de antemano.

camparte los 3 scrips por favor, para ver como ayudarte.

Hola

Haz probado con un simple “Union All”

Pudiera ser suficiente con esto.

Saludos. :wink:

Hola @Gera_Mendez he probado con Union All, pero me muestra error de syntaxis. Por ejemplo al unir:

SELECT TOP 15 T0.“CardName” AS “Clientes”
, SUM (T0.“DocTotal” ) AS “Vencido”
FROM OINV T0
WHERE T0.“PaidSys” = 0 AND T0.“DocDueDate” < CURRENT_DATE
GROUP BY T0.“CardName”
ORDER BY SUM (T0.“DocTotal” ) DESC

UNION ALL

SELECT TOP 15 T0.“CardName” AS “Clientes”
, SUM (T0.“DocTotal” ) AS “No Vencido” FROM OINV T0
WHERE T0.“PaidSys” = 0 AND T0.“DocDueDate” > CURRENT_DATE
GROUP BY T0.“CardName” ORDER BY SUM (T0.“DocTotal” ) DESC

me muestra el siguiente error,

1). [SAP AG][LIBODBCHDB32 DLL][HDBODBC32] Syntax error or access violation;257 sql syntax error: incorrect syntax near “UNION”: line 16 col 1 ‘’ (SWEI) (at pos 220)

1 me gusta

@Gera_Mendez

Ahora por ejemplo les saque la clausula order by, y uní las tres queries con el union all

SELECT TOP 15 T0.“CardName” AS “Clientes”
, SUM (T0.“DocTotal” ) AS "Vencido"FROM OINV T0
WHERE T0.“PaidSys” = 0 AND T0.“DocDueDate” < CURRENT_DATE
GROUP BY T0.“CardName”

Union all

SELECT TOP 15 T0.“CardName” AS “Clientes”
, SUM (T0.“DocTotal” ) AS “No Vencido” FROM OINV T0
WHERE T0.“PaidSys” = 0 AND T0.“DocDueDate” > CURRENT_DATE
GROUP BY T0.“CardName”

Union all

SELECT TOP 15 T0.“CardName"AS"Cliente”, SUM(T0.“DocTotal” )
AS “TOTAL” FROM OINV T0 WHERE T0.“PaidSys” = 0
GROUP BY T0.“CardName”

Me muestra el resultado correcto. Pero en orden inadecuado. Pues me aparecen solo dos columnas (CardName y SumDocTotal) y 45 filas(3 veces los 15 clientes). Es decir me muestra la información pero vertical. y la necesito horizontal.

1 me gusta

@FranciscoAn, ¿necesitas que al final se muestren solamente 15 clientes? y si es así, ¿cuál será el parámetro que defina qué 15 clientes quieres? Porque en el query de tu pregunta muestras primero los 15 clientes con mayor saldo sin vencer, luego los 15 con mayor saldo vencido, y luego los 15 con mayor saldo total, creo que deberías definir un solo parámetro.

Una vez definiendo eso, es más sencillo armar el query.

1 me gusta

Podrías hacerlo como lo comenta @pcarrasco.

Saludos.

Hola @JonathanAzael exactamente, necesito que se muestren solo 15 clientes. El parametro que define es el del total general. la suma de los vencidos con los no vencidos.

Ese es el tema.

Agradezco tu aporte

Si, me parece que podría ser una buena solución. Estoy leyendo acerca del tema de las sub consultas, para generarlo de esta forma. Si tienen alguna fuente de información estaría muy agradecido.

Saludos.

Prueba con esto:

SELECT TOP (15)
T0.CardName,
(SELECT SUM (T1.DocTotal) FROM OINV T1 WHERE T1.CardName = T0.CardName AND T1.PaidSys = 0 AND T1.DocDueDate >= GETDATE() AND T1.CANCELED = ‘N’) AS [No Vencido],
(SELECT SUM (T1.DocTotal) FROM OINV T1 WHERE T1.CardName = T0.CardName AND T1.PaidSys = 0 AND T1.DocDueDate < GETDATE() AND T1.CANCELED = ‘N’) AS [Vencido],
(SELECT SUM (T1.DocTotal) FROM OINV T1 WHERE T1.CardName = T0.CardName AND T1.PaidSys = 0 AND T1.CANCELED = ‘N’) AS [Vencido]
FROM OINV AS T0 WHERE T0.PaidSys = 0
GROUP BY T0.CardName
ORDER BY SUM(T0.DocTotal) DESC

Modifiqué un poco las condiciones. Agregué una para cancelaciones (CANCELED = ‘N’).

@JonathanAzael GENIO excelente muchas gracias. Algunos detalles, pero impecable.

Supongo así es como se hacen las sub consultas.

Agradecido.
Saludos.

1 me gusta

Exactamente, así son las subconsultas, solo debes tomar en cuenta varios factores, como que realmente apliques todos los filtros que requieras y que no dupliques información. En la empresa donde trabajo utilizo mucho este método, así como la sentencia de UNION o los JOIN.

Saludos

Genial, muchas gracias. Parece muy útil esta metodología. Voy a practicarla.
Saludos.

join
Amigo…leí tarde esta solicitud. Por si te sirve este esquema en donde se muestra la filosofía de los join muy gráficamente.
Quedo a tu disposición si necesitas ayuda en el futuro.
Saludos

2 Me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.