Error en query que si funciona en SQL

Hola a todos,

Este tema ya es un poco repetido pero he tratado de solucionarlo según lo que he leído aquí pero no lo logro. Tengo un query que me funciona bien en SQL Management Studio pero cuando lo quiero correr desde SBO me sale un mensaje de error. El query es el siguiente:

DECLARE @Fd AS DATE
DECLARE @whs AS VARCHAR
SET @Fd = [%0]
SET @whs = [%1]
 
SELECT
MIN(c.GroupCode) AS 'GroupCode',
MIN(oitb.ItmsGrpNam) AS 'GroupName',
MIN(c.Wh) AS 'Warehouse',
SUM(c.balance) AS 'Total items',
SUM(c.value) AS 'Total price',
SUM(c.totalvalue) AS 'Total revenue',
SUM(c.mes) AS 'Menor a 30 días',
SUM(c.dos) AS 'Entre 30 a 60 días',
SUM(c.tres) AS 'Entre 60 a 90 días',
SUM(c.mas) AS 'Mayor a 90 días'
FROM
(
                SELECT
                b.code,
                b.GroupCode,
                b.Wh,
                b.balance,
                b.value,
                (b.balance * b.value) AS 'totalvalue',
                ISNULL(CASE WHEN b.days < 30 THEN b.balance END,0) 'mes' ,
                ISNULL(CASE WHEN b.days BETWEEN 30 AND 60 THEN b.balance END,0) 'dos',
                ISNULL(CASE WHEN b.days BETWEEN 60 AND 90 THEN b.balance END,0) 'tres',
                ISNULL(CASE WHEN b.days > 180 THEN b.balance END, 0) 'mas'
 
                FROM (
                                SELECT
                                a.code,
                                a.GroupCode,
                                a.wh,
                                a.balance,
                                a.value,
                                DATEDIFF(dd,dt,GETDATE())'days'
                                FROM (
                                                SELECT
                                                max(oinm.itemcode)'Code',
                                                max(oitm.ItmsGrpCod) 'GroupCode',
                                                max(oinm.Warehouse) 'Wh',
                                                sum(oinm.inqty-oinm.outqty) 'Balance',
                                                sum(oinm.transvalue) 'Value',
                                                max(oinm.docdate) 'dt'
                                                FROM oinm 
                                                INNER JOIN oitm on oinm.itemcode=oitm.itemcode
                                                WHERE oinm.warehouse= @whs
                                                AND oinm.DocDate <= @Fd
                                                GROUP BY oinm.itemcode
                                )a
                )b
)c
JOIN
oitb
ON
oitb.ItmsGrpCod = c.GroupCode
GROUP BY GroupCode

Si alguien le puede dar una ojeada y ver cual puede ser el problema le agradecería.

Slds,

LV

1 me gusta

Hola

Prueba de la siguiente forma.

DECLARE @Fd AS DATE
DECLARE @whs AS VARCHAR
SET @Fd =  (/*SELECT I0.Docdate FROM dbo.OINM I0 WHERE I0.DocDate= */'[%0]')  
SET @whs  =  (/*SELECT I0.warehouse FROM dbo.OINM I0 WHERE I0.warehouse= */'[%1]')  

 
SELECT
MIN(c.GroupCode) AS 'GroupCode',
MIN(oitb.ItmsGrpNam) AS 'GroupName',
MIN(c.Wh) AS 'Warehouse',
SUM(c.balance) AS 'Total items',
SUM(c.value) AS 'Total price',
SUM(c.totalvalue) AS 'Total revenue',
SUM(c.mes) AS 'Menor a 30 días',
SUM(c.dos) AS 'Entre 30 a 60 días',
SUM(c.tres) AS 'Entre 60 a 90 días',
SUM(c.mas) AS 'Mayor a 90 días'
FROM
(
                SELECT
                b.code,
                b.GroupCode,
                b.Wh,
                b.balance,
                b.value,
                (b.balance * b.value) AS 'totalvalue',
                ISNULL(CASE WHEN b.days < 30 THEN b.balance END,0) 'mes' ,
                ISNULL(CASE WHEN b.days BETWEEN 30 AND 60 THEN b.balance END,0) 'dos',
                ISNULL(CASE WHEN b.days BETWEEN 60 AND 90 THEN b.balance END,0) 'tres',
                ISNULL(CASE WHEN b.days > 180 THEN b.balance END, 0) 'mas'
 
                FROM (
                                SELECT
                                a.code,
                                a.GroupCode,
                                a.wh,
                                a.balance,
                                a.value,
                                DATEDIFF(dd,dt,GETDATE())'days'
                                FROM (
                                                SELECT
                                                max(oinm.itemcode)'Code',
                                                max(oitm.ItmsGrpCod) 'GroupCode',
                                                max(oinm.Warehouse) 'Wh',
                                                sum(oinm.inqty-oinm.outqty) 'Balance',
                                                sum(oinm.transvalue) 'Value',
                                                max(oinm.docdate) 'dt'
                                                FROM oinm 
                                                INNER JOIN oitm on oinm.itemcode=oitm.itemcode
                                                WHERE oinm.warehouse= @whs
                                                AND oinm.DocDate <= @Fd
                                                GROUP BY oinm.itemcode
                                )a
                )b
)c
INNER JOIN oitb
ON oitb.ItmsGrpCod = c.GroupCode
GROUP BY GroupCode
3 Me gusta

Gracias por tu ayuda. Funcionó “parcialmente” porque ya me pidió la fecha de corte y el almacén que antes ni eso me pedía y me salía el error pero ahora después de ingresar las variables me sale este error:

1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near ‘’’.
2). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near ‘’’.
3). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near ‘‘’.
4). [Microsoft][SQL Server Native Client 11.0][SQL Server]Unclosed quotation mark after the character string ’ FROM oinm INNER JOIN oitm on oinm.itemcode=oitm.itemcode WHERE oinm.warehouse= @whs AND oinm.DocDate <= @Fd GROUP BY oinm.itemcode)a)b)c INNER JOIN
5). [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement ‘’ (SWEI) (s) could not be prepared.

A mi me funciona perfecto la Query de @bfierro , por el error numero 4, verifica que no tengas algun problema con esto:

h_tps://blog.sqlauthority.com/2008/02/17/sql-server-how-to-escape-single-quotes-fix-error-105-unclosed-quotation-mark-after-the-character-string/

Saludos.

3 Me gusta

Tienes razón, parece que al copiar y pegar se me fue algo mal. Ya no me bota ningún error pero ahora me dice que no hay datos para esa consulta. Lo que estoy buscando es un informe de antigüedad de inventario por Grupo por Almacén con fecha de corte basado en la tabla OINM. Tengo que revisar todo el query nuevamente.

Slds,

LV

1 me gusta

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