Buenas tardes, tengo el siguiente problema:
Tengo dos querys y las quiero unir…ya he intentado con UNION ALL o INNER JOIN y nada. Ambas querys me funcionan correctamente por separado, pero cuando las pongo en una única query no me arroja los datos correctos.
Query 1: (Muy sencilla: dice el importe facturado por meses)
SELECT MonthName(T0."DocDate") AS Mes,
CASE WHEN T0."isIns"='N' THEN (SUM(T0."DocTotal" - T0."VatSum"))END AS "Facturado"
FROM OINV T0
GROUP BY MonthName(T0."DocDate"),T0."isIns";
Query 2: (dice el importe pendiente de facturar por meses)
SELECT MonthName(T0."DocDate") AS MES,
SUM(T0."DocTotal" - T0."VatSum") AS "Pte Facturar"
FROM ODLN T0
WHERE T0."U_ACC_TA" = 'Facturable' AND T0."DocStatus" = 'O'
GROUP BY MonthName(T0."DocDate")
He buscado otros temas en el foro y no consigo dar con la solución. Les agradecería enormemente su ayuda.
Muchas gracias de antemano!!
Hola buenos días Usando el Union all quedaría, lo corri pero yo no uso el Campo T0.U_ACC_TA este capo es de ustedes lo quite y si corrió sin ningún problema ahora si quieres unir todo en un renglon es diferente el proceso.
SELECT
Month(T0.DocDate) AS Mes,
CASE WHEN T0.isIns = 'N' THEN (SUM(T0.DocTotal - T0.VatSum))END 'Facturado',
0 'Pte Facturar'
FROM OINV T0
GROUP BY Month(T0.DocDate),T0.isIns
UNION ALL
SELECT Month(T0.DocDate) AS MES,0 'Facturado',
SUM(T0.DocTotal - T0.VatSum) AS 'Pte Facturar'
FROM ODLN T0
WHERE T0.U_ACC_TA = 'Facturable' AND T0.DocStatus = 'O'
GROUP BY Month(T0.DocDate)
1 me gusta
Muchísimas gracias Ixrealmtz!! Si ahora quisiera añadir una tercera columna con el TOTAL para sumar los importes de las dos querys cómo lo tendría que hacer? De tal modo que mayo quedara en una sola fila e hiciera el sumatorio de los dos importes.
Muchísimas gracias de nuevo por la ayuda y por la rapidez!
Bueno una solución seria esta, que bueno el detalle que veo que no esta controlado por año.
por decir en el mio tengo de 2017 a 2020 y pues a mi no me serviría ya que aria el concentrado de todos los años y no de un año en especifico
espero explicarme
si gusta también podría explicarlo digo para el que no lo entienda.
envio correcion del anterior
SELECT
Meses = Case When T0.Mes = '01' Then '1.Enero'
When T0.Mes = '02' Then '2.Febrero'
When T0.Mes = '03' Then '3.-Marzo'
When T0.Mes = '04' Then '4.-Abril'
When T0.Mes = '05' Then '5.-Mayo'
When T0.Mes = '06' Then '6.-Junio'
When T0.Mes = '07' Then '7.-Julio'
When T0.Mes = '08' Then '8.-Agosto'
When T0.Mes = '09' Then '9.-Septiembre'
When T0.Mes = '10' Then '10.-Octubre'
When T0.Mes = '11' Then '11.-Noviembre'
When T0.Mes = '12' Then '12.-Diciembre'
end,
T0.facturado,T0.PteFacturar,
Total = T0.facturado + ISNULL(T0.PteFacturar,0)
FROM
(SELECT
Month(T0.DocDate) AS Mes,
SUM(T0.DocTotal - T0.VatSum) AS 'Facturado',
(SELECT SUM(T1.DocTotal - T1.VatSum)
FROM ODLN T1 WHERE Month(T1.DocDate) = Month(T0.DocDate) AND T0.U_ACC_TA = 'Facturable' AND T1.DocStatus = 'O' ) AS 'PteFacturar'
FROM OINV T0 WHERE T0.isIns = 'N'
GROUP BY Month(T0.DocDate)) T0 order by T0.Mes
Hola Ixrealmtz,
Muchas gracias de nuevo, he probado el código que indicas y me da un syntax error en la penúltima línea:
SELECT
Case When T0."Mes" = '01' Then "1.Enero"
When T0."Mes" = '02' Then "2.Febrero"
When T0."Mes" = '03' Then "3.-Marzo"
When T0."Mes" = '04' Then "4.-Abril"
When T0."Mes" = '05' Then "5.-Mayo"
When T0."Mes" = '06' Then "6.-Junio"
When T0."Mes" = '07' Then "7.-Julio"
When T0."Mes" = '08' Then "8.-Agosto"
When T0."Mes" = '09' Then "9.-Septiembre"
When T0."Mes" = '10' Then "10.-Octubre"
When T0."Mes" = '11' Then "11.-Noviembre"
When T0."Mes" = '12' Then "12.-Diciembre"
end,
T0."Facturado", T0."PteFacturar",
T0."Facturado" + ISNULL(T0."PteFacturar",0)
FROM
(SELECT
Month(T0."DocDate") AS "Mes",
SUM(T0."DocTotal" - T0."VatSum") AS "Facturado",
(SELECT SUM(T1."DocTotal" - T1."VatSum")
FROM ODLN T1 WHERE Month(T1."DocDate") = Month(T0."DocDate") AND T0."U_ACC_TA" = 'Facturable' AND T1."DocStatus" = 'O' ) AS "PteFacturar"
FROM OINV T0 WHERE T0."isIns" = 'N'
GROUP BY Month(T0."DocDate"), T0."U_ACC_TA" Order by T0."Mes"
Este es el error: 1). [SAP AG][LIBODBCHDB32 DLL][HDBODBC32] Syntax error or access violation;257 sql syntax error: line 26 col 57 ‘Acuerdo global’ (OOAT) (at pos 933)
Espero puedas ayudarme.
Muchas gracias
esto esta mal
GROUP BY Month(T0.“DocDate”), T0.“U_ACC_TA” Order by T0.“Mes”
debe de ser
GROUP BY Month(T0.DocDate)) T0 order by T0.Mes
Quieres agruparlo por mas campos
checa el codigo anterior que te envie por que ami si me sale bien o mas bien por que campos lo quieres Agrupar.
Envio codigo nuevamente:
SELECT
Meses = Case When T0.Mes = '01' Then '1.Enero'
When T0.Mes = '02' Then '2.Febrero'
When T0.Mes = '03' Then '3.-Marzo'
When T0.Mes = '04' Then '4.-Abril'
When T0.Mes = '05' Then '5.-Mayo'
When T0.Mes = '06' Then '6.-Junio'
When T0.Mes = '07' Then '7.-Julio'
When T0.Mes = '08' Then '8.-Agosto'
When T0.Mes = '09' Then '9.-Septiembre'
When T0.Mes = '10' Then '10.-Octubre'
When T0.Mes = '11' Then '11.-Noviembre'
When T0.Mes = '12' Then '12.-Diciembre'
end,
T0.facturado,T0.PteFacturar,
Total = T0.facturado + ISNULL(T0.PteFacturar,0)
FROM
(SELECT
Month(T0.DocDate) AS Mes,
SUM(T0.DocTotal - T0.VatSum) AS 'Facturado',
(SELECT SUM(T1.DocTotal - T1.VatSum) FROM ODLN T1 WHERE Month(T1.DocDate) = Month(T0.DocDate) AND T1.DocStatus = 'O' ) AS 'PteFacturar'
FROM OINV T0 WHERE T0.isIns = 'N'
GROUP BY Month(T0.DocDate)) T0 order by T0.Mes
si te das cuenta quite un and ( AND T0.U_ACC_TA = 'Facturable' ) ya que el campo U_ACC_TA yo no lo manejo pero adicionalo y ya te quedara bien te quedaria asi
Month(T1.DocDate) = Month(T0.DocDate) AND T0.U_ACC_TA = 'Facturable' AND T1.DocStatus = 'O' ) AS 'PteFacturar'
bueno es todo espero te ayude y mucho exito en tus querys
Hola lxrealmtz,
He copiado y pegado exactamente el código que indicas pero me da error…Puede que sea porque la versión de SAP con la que trabajo es SAP Hana?
Este es el primer error que me da al copiar el código:
1). [SAP AG][LIBODBCHDB32 DLL][HDBODBC32] Syntax error or access violation;257 sql syntax error: incorrect syntax near “=”: line 2 col 7 ‘Alertas recibidas’ (OAIB) (at pos 15)
Entonces, elimino “Meses =” para que la segunda línea empiece con “Case”, ejecuto y me da error en la fila 17 (la que empieza por “Total =”). Voy puliendo todos los errores que me va dando hasta que llego al siguiente error en el que ya no sé cómo arreglarlo:
1). [SAP AG][LIBODBCHDB32 DLL][HDBODBC32] General error;266 inconsistent datatype: DECIMAL or INT are invalid function argument types: line 17 col 18 ‘’ (ECM2) (at pos 594)
Y este es el código que he ido puliendo hasta llegar a este error:
SELECT
Case When T0."Mes" = '01' Then '1.Enero'
When T0."Mes" = '02' Then '2.Febrero'
When T0."Mes" = '03' Then '3.-Marzo'
When T0."Mes" = '04' Then '4.-Abril'
When T0."Mes" = '05' Then '5.-Mayo'
When T0."Mes" = '06' Then '6.-Junio'
When T0."Mes" = '07' Then '7.-Julio'
When T0."Mes" = '08' Then '8.-Agosto'
When T0."Mes" = '09' Then '9.-Septiembre'
When T0."Mes" = '10' Then '10.-Octubre'
When T0."Mes" = '11' Then '11.-Noviembre'
When T0."Mes" = '12' Then '12.-Diciembre'
end,
T0."Facturado",T0."PteFacturar",
T0."Facturado" + ISNULL(T0."PteFacturar",0)
FROM
(SELECT
Month(T0."DocDate") AS "Mes",
SUM(T0."DocTotal" - T0."VatSum") AS "Facturado",
(SELECT SUM(T1."DocTotal" - T1."VatSum") FROM ODLN T1 WHERE Month(T1."DocDate") = Month(T0."DocDate") AND T1."DocStatus" = 'O' ) AS "PteFacturar"
FROM OINV T0 WHERE T0."isIns" = 'N'
GROUP BY Month(T0."DocDate")) T0 order by T0."Mes"
Mil gracias de nuevo,
hola prueba asi
SELECT
(Case When T0."Mes" = '01' Then '1.Enero'
When T0."Mes" = '02' Then '2.Febrero'
When T0."Mes" = '03' Then '3.-Marzo'
When T0."Mes" = '04' Then '4.-Abril'
When T0."Mes" = '05' Then '5.-Mayo'
When T0."Mes" = '06' Then '6.-Junio'
When T0."Mes" = '07' Then '7.-Julio'
When T0."Mes" = '08' Then '8.-Agosto'
When T0."Mes" = '09' Then '9.-Septiembre'
When T0."Mes" = '10' Then '10.-Octubre'
When T0."Mes" = '11' Then '11.-Noviembre'
When T0."Mes" = '12' Then '12.-Diciembre'
end ) as Meses,
T0."Facturado",T0."PteFacturar",
Case When T0."PteFacturar" > 0 Then T0."Facturado" + T0."PteFacturar" ELSE T0."Facturado" end as Total
--(T0."Facturado" + IFNULL(T0."PteFacturar",0)) as Total
FROM
(SELECT
Month(T0."DocDate") AS "Mes",
SUM(T0."DocTotal" - T0."VatSum") AS "Facturado",
(SELECT SUM(T1."DocTotal" - T1."VatSum") FROM ODLN T1 WHERE Month(T1."DocDate") = Month(T0."DocDate") AND T0.U_ACC_TA = 'Facturable' AND T1."DocStatus" = 'O' ) AS "PteFacturar"
FROM OINV T0 WHERE T0."isIns" = 'N'
GROUP BY Month(T0."DocDate")) T0 order by T0."Mes"
te puese un case y te comentare un IFnull de hana ya que en SAP b1 es isnull prueba los cual para ver cual te sirve.
Para hacer referencia inicia con una @ @MartaG
saludos
Muchísimas gracias @lxrealmtz !!!
Ahora sí! lo único que he quitado el CASE y he añadido el campo de usuario al Group By y me ha dejado. Comparto el código por si alguien lo necesitara:
SELECT
(Case When T0."Mes" = '01' Then '1.-Enero'
When T0."Mes" = '02' Then '2.-Febrero'
When T0."Mes" = '03' Then '3.-Marzo'
When T0."Mes" = '04' Then '4.-Abril'
When T0."Mes" = '05' Then '5.-Mayo'
When T0."Mes" = '06' Then '6.-Junio'
When T0."Mes" = '07' Then '7.-Julio'
When T0."Mes" = '08' Then '8.-Agosto'
When T0."Mes" = '09' Then '9.-Septiembre'
When T0."Mes" = '10' Then '10.-Octubre'
When T0."Mes" = '11' Then '11.-Noviembre'
When T0."Mes" = '12' Then '12.-Diciembre'
end ) as Meses,
T0."Facturado",T0."PteFacturar",
(T0."Facturado" + IFNULL(T0."PteFacturar",0)) as Total
FROM
(SELECT
Month(T0."DocDate") AS "Mes",
SUM(T0."DocTotal" - T0."VatSum") AS "Facturado",
(SELECT SUM(T1."DocTotal" - T1."VatSum") FROM ODLN T1 WHERE Month(T1."DocDate") = Month(T0."DocDate") AND T0.U_ACC_TA = 'Facturable' AND T1."DocStatus" = 'O' ) AS "PteFacturar"
FROM OINV T0 WHERE T0."isIns" = 'N'
GROUP BY Month(T0."DocDate"), T0.U_ACC_TA) T0 order by T0."Mes"
Saludos!
Saludos @MartaG y @lxrealmtz.
Me da gusto ver que han encontrado la solución al tema, solo les pido de favor den el formato correcto al código que comparten, esto es una regla del foro.
En varias ocaciones he editado sus respuestas para poner el código en el formato correcto, ha sido mi error no hacer esta mención desde el primer momento.
Saludos.
1 me gusta