¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como filtrar registros com valor zero no ABAP CDS usando a declaração HAVING

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

Olá,

Estou explorando a visualização ABAP CDS e testando o seguinte para calcular a quantidade de estoque emitido, mas ainda não recebido para cada item de pedido e relatar por material, planta e lote.

Como estou revisando em EKBE, 90% do resultado agregado teria uma soma de valor zero, e não estou interessado nesses registros. Portanto, gostaria de filtrá-los usando a declaração HAVING como mostrado abaixo. No entanto, está dando um erro de sintaxe.

Agradeço se alguém puder fornecer alguma orientação. Obrigado.

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 StockEmTransito
}
 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 StockEmTransito > 0
;
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá,

Na definição original do CDS, o erro de sintaxe é o seguinte:

Se eu tentar com a sugestão da Sandra, dá outro erro de sintaxe que é o seguinte:

O problema principal com este tema é o uso de alias com a condição "having". Encontrei um exemplo fornecido pela SAP que se parece assim:

@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;

Se eu fizer uma pequena alteração neste exemplo, substituindo "sum(snwd_so.gross_amount)" pelo alias "sum_gross_amount", ele relataria o mesmo erro de sintaxe "Coluna sum_gross_amount não é conhecida".

@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;
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Em SQL padrão e em visualizações CDS, o HAVING pode não usar o alias, mas deve repetir a expressão correspondente, ver exemplo em HAVING .

No seu 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...

Você forneceu todas as informações, exceto a captura de tela do erro de sintaxe, que é a informação real necessária.

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?