¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo filtrar registros con valor cero en ABAP CDS usando la declaración HAVING

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 26 Vistas
0
Cargando...

Hola,

Estoy explorando la vista ABAP CDS y probando lo siguiente para calcular la cantidad de stock emitido, pero aún no recibido para cada elemento de pedido y reportar por material, planta y lote.

Dado que estoy revisando en EKBE, el 90% del resultado agregado tendría una suma de valor cero, y no estoy interesado en esos registros. Por lo tanto, me gustaría filtrarlos utilizando la declaración HAVING como se muestra a continuación. Sin embargo, está dando un error de sintaxis.

Agradezco si alguien pudiera proporcionar alguna orientación. Gracias.

define view YCDSV_SIT as
select 
  from wb2_v_ekko_ekpo2 as a
  join ekbe             as b
    on a.ebeln_i = b.ebeln
   and a.ebelp_i = b.ebelp
{
  a.matnr_i as matnr
, a.werks_i as werks
, a.ebeln_i
, a.ebelp_i
, b.xblnr
, b.charg
, sum( 
       case
         when shkzg = 'S' then b.menge * -1
         else b.menge
       end
     ) as StockEnTransito
}
 where   a.bsart   = 'ZSTO'
   and   a.loekz_i = ' '
   and   a.elikz_i = ' '
   and   b.zekkn   = '00'
   and ( b.vgabe   = '1'
    or   b.vgabe   = '6' )
 group by matnr_i, werks_i, ebeln_i, ebelp_i, xblnr, charg
having StockEnTransito > 0
;
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola,

En la definición original de CDS, el error de sintaxis es el siguiente:

Si pruebo con la sugerencia de Sandra, da otro error de sintaxis que es el siguiente:

El problema principal con este tema es el uso de alias con la condición "having". Encontré un ejemplo proporcionado por SAP que se ve así:

@AbapCatalog.sqlViewName: 'SALES_ORDER_VW' 
define view sales_order as 
  select from snwd_so 
    inner join 
      snwd_bpa on buyer_guid = snwd_bpa.node_key 
  {  key bp_role as role, //p.ej. cliente o proveedor 
     count(distinct buyer_guid) as partners_count, 
     sum(snwd_so.gross_amount) as sum_gross_amount } 
  where snwd_so.currency_code = 'EUR' 
  group by bp_role 
  having sum(snwd_so.gross_amount) > 100000.00;

Si hago un pequeño cambio en este ejemplo reemplazando "sum(snwd_so.gross_amount)" con el alias "sum_gross_amount", reportaría el mismo error de sintaxis "Columna sum_gross_amount no es conocida".

@AbapCatalog.sqlViewName: 'SALES_ORDER_VW' 
define view sales_order as 
  select from snwd_so 
    inner join 
      snwd_bpa on buyer_guid = snwd_bpa.node_key 
  {  key bp_role as role, //p.ej. cliente o proveedor 
     count(distinct buyer_guid) as partners_count, 
     sum(snwd_so.gross_amount) as sum_gross_amount } 
  where snwd_so.currency_code = 'EUR' 
  group by bp_role 
  having sum_gross_amount > 100000.00;
0
Cargando...

En SQL estándar y en vistas CDS, HAVING puede no utilizar el alias pero debe repetir la expresión correspondiente, cf ejemplo en HAVING .

En tu caso:

...
HAVING sum( 
       case
         when shkzg = 'S' then b.menge * -1
         else b.menge
       end ) > 0
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Has proporcionado toda la información excepto la captura de pantalla del error de sintaxis, que es la información real que se necesita.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?