FS con multiples valores en hana

que tal estimados, estoy revisando el posible cambio de una FS de SQL a Hana en SQL funciona de la siguiente manera:

image

tomando la lista de socios de negocio de tipo proveedor o de tipo cliente segun sea el tipo de llamada de servicio, el query va un poco asi:

declare @BPType char(1)

set @BPType=$[OSCL.BPType]

if (@BPType='R')
begin
select T0.cardcode, t0.cardname from ocrd t0 where t0.CardCode like 'CL%%'
end
else
begin
select T0.cardcode, t0.cardname from ocrd t0 where t0.CardCode like 'PR%%'
end

y en hana quedaba de la siguiente manera:

SELECT CASE WHEN $[OSCL."BPType"] = 'R' THEN
(SELECT T0."CardCode", T0."CardName" FROM OCRD T0 WHERE T0."CardCode" LIKE 'CL%%')
ELSE (SELECT T0."CardCode", T0."CardName" FROM OCRD T0 WHERE T0."CardCode" LIKE 'PR%%')
END
FROM DUMMY

pero no funciona :sweat_smile: :sweat_smile: probe de varias formas ejecutando los querys y funcionan sin problema, la unica forma que hice funcionar la FS fue con un TOP 1, pero lo ideal es que muestre la ventanada, los errores que manda al intentar hacerlo como lo plasmo es que regresa varios valores y al parecer hana solo acepta 1 valor, alguien tiene algun caso similar o algo por el estilo parecido?

Has intentado con un INTO

BPType nvarchar (1); -- variable

Select T0."BPType" Into BPType From OSCL T0
If BPType = 'R'
  Then  
    Select T0."CardCode", T0."CardName" From OCRD T0 Where T0."CardCode" like 'CL%%'
  Else  
    Select T0."CardCode", T0."CardName" from OCRD T0 where T0."CardCode" like 'PR%%'
  End
 From DUMMY

Saludos.

1 me gusta

Lo reviso mañana, pero de ya he intentado usar variables antes en el Query manager y no funcionan, te doy comentarios mañana, thks

Hola @Daniel_Torrez
Las subconsultas en el SELECT solo pueden retornar un único valor, es una restricción del lenguaje SQL que aplica para cualquier motor de base de datos. En caso de necesitar utilizar una subconsulta que retorna varios registros deberías relacionarla con un JOIN.

Para tu caso, lo puedes trabajar de la siguiente manera.

SELECT T0."CardCode", T0."CardName" FROM OCRD T0 
WHERE T0."CardCode" LIKE (CASE $[OSCL.BPType] WHEN 'R' THEN 'CL%' ELSE 'PR%' END)

Andres Ramirez Jaramillo :colombia:

1 me gusta

estimados buen dia, primero que nada muchas gracias por tomar de su tiempo para apoyarme con mi problema @pcarrasco como te comente las variables no son de mucha ayuda en query manager desde la linea 1 mando error, @andresramirez gracias por la solucion, un companero me apoyo con esta consulta quedando de la siguiente forma:

SELECT * FROM (SELECT DISTINCT CASE WHEN $[OSCL."BPType"] = 'P' THEN T1."CardCode" ELSE T0."CardCode" END AS "Codigo", 
CASE WHEN $[OSCL."BPType"] = 'P' THEN T1."CardName" ELSE T0."CardName" END AS "Nombre" 
FROM (SELECT "CardCode", "CardName" FROM "OCRD" WHERE "CardCode" LIKE 'CL%%') T0 
CROSS JOIN (SELECT "CardCode", "CardName" FROM "OCRD" WHERE "CardCode" LIKE 'PR%%') T1) E0 ORDER BY "Codigo"

de igual forma probe tu solucion y funciona de la misma forma y se ve mas optimizada, desde ya muchas gracias Saludos.