The following query is throwing an error in @param2:
DECLARE @Years int = {{txtStockYears.value}};
WITH YearlyAverageSales AS (
SELECT
npi.IdArticulo,
a.cantidad,
descripcion,
MAX(np.FechaEmision) as UltimaCompra,
SUM(npi.Cantidad) as SumCantidad
FROM
[dbo].[NotaPedido_Items] npi
INNER JOIN
[dbo].[Articulos] a on a.idArticulo = npi.IdArticulo
JOIN
[dbo].[NotaPedidos] np ON npi.IdNotaPedido = np.IdNotaPedido
WHERE
np.FechaEmision >= DATEADD(YEAR, -@Years, CAST(GETDATE() AS DATE))
GROUP BY
npi.IdArticulo,
a.cantidad,
a.descripcion
)
SELECT
a.idArticulo,
a.Codigo,
a.descripcion,
c.IdCategoria,
c.Descripcion,
a.cantidad AS cantidad_en_stock,
s.Name as Proveedor,
s.Country as PaisProveedor,
y.SumCantidad as cantidad_vendida_en_periodo,
CASE
WHEN y.SumCantidad > a.cantidad THEN (y.SumCantidad-a.Cantidad) * a.preciounitario
ELSE 0
END AS costo_de_oportunidad,
CASE
WHEN a.cantidad <= y.SumCantidad THEN 'Necesita Reposicion'
ELSE 'Hay stock suficiente para periodo'
END AS estado,
y.UltimaCompra as ultima_compra
FROM
YearlyAverageSales y
JOIN
[dbo].[Articulos] a ON y.IdArticulo = a.idArticulo
JOIN
[dbo].[Categorias] c on c.IdCategoria = a.IdCategoria
JOIN
[dbo].[Suppliers] s on s.InternalId = a.proveedor
WHERE
a.discontinuado = 0 AND
((LEN('{{filterCategory.value}}') = 0) OR (a.IdCategoria in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('{{filterCategory.value}}', '[', ''), ']', ''), ','))))
AND ((LEN('{{filterProvider.value}}') = 0) OR (a.Proveedor in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('{{filterProvider.value}}', '[', ''), ']', ''), ','))))
AND ((LEN('{{filterCountry.value}}') = 0) OR (s.Country in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('{{filterCountry.value}}', '[', ''), ']', ''), ','))))
AND ({{ chkNeedRestock.value ? 0 : 1}} = 1 OR a.cantidad <= y.SumCantidad)
order by CASE
WHEN y.SumCantidad > a.cantidad THEN (y.SumCantidad-a.Cantidad) * a.preciounitario
end desc
The rendered query is as follows:
With params:
DECLARE @Years int = {{txtStockYears.value}};
WITH YearlyAverageSales AS (
SELECT
npi.IdArticulo,
a.cantidad,
descripcion,
MAX(np.FechaEmision) as UltimaCompra,
SUM(npi.Cantidad) as SumCantidad
FROM
[dbo].[NotaPedido_Items] npi
INNER JOIN
[dbo].[Articulos] a on a.idArticulo = npi.IdArticulo
JOIN
[dbo].[NotaPedidos] np ON npi.IdNotaPedido = np.IdNotaPedido
WHERE
np.FechaEmision >= DATEADD(YEAR, -@Years, CAST(GETDATE() AS DATE))
GROUP BY
npi.IdArticulo,
a.cantidad,
a.descripcion
)
SELECT
a.idArticulo,
a.Codigo,
a.descripcion,
c.IdCategoria,
c.Descripcion,
a.cantidad AS cantidad_en_stock,
s.Name as Proveedor,
s.Country as PaisProveedor,
y.SumCantidad as cantidad_vendida_en_periodo,
CASE
WHEN y.SumCantidad > a.cantidad THEN (y.SumCantidad-a.Cantidad) * a.preciounitario
ELSE 0
END AS costo_de_oportunidad,
CASE
WHEN a.cantidad <= y.SumCantidad THEN 'Necesita Reposicion'
ELSE 'Hay stock suficiente para periodo'
END AS estado,
y.UltimaCompra as ultima_compra
FROM
YearlyAverageSales y
JOIN
[dbo].[Articulos] a ON y.IdArticulo = a.idArticulo
JOIN
[dbo].[Categorias] c on c.IdCategoria = a.IdCategoria
JOIN
[dbo].[Suppliers] s on s.InternalId = a.proveedor
WHERE
a.discontinuado = 0 AND
((LEN('{{filterCategory.value}}') = 0) OR (a.IdCategoria in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('{{filterCategory.value}}', '[', ''), ']', ''), ','))))
AND ((LEN('{{filterProvider.value}}') = 0) OR (a.Proveedor in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('{{filterProvider.value}}', '[', ''), ']', ''), ','))))
AND ((LEN('{{filterCountry.value}}') = 0) OR (s.Country in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('{{filterCountry.value}}', '[', ''), ']', ''), ','))))
AND ({{ chkNeedRestock.value ? 0 : 1}} = 1 OR a.cantidad <= y.SumCantidad)
order by CASE
WHEN y.SumCantidad > a.cantidad THEN (y.SumCantidad-a.Cantidad) * a.preciounitario
end desc
and actual data:
DECLARE @Years int = 2;
WITH YearlyAverageSales AS (
SELECT
npi.IdArticulo,
a.cantidad,
descripcion,
MAX(np.FechaEmision) as UltimaCompra,
SUM(npi.Cantidad) as SumCantidad
FROM
[dbo].[NotaPedido_Items] npi
INNER JOIN
[dbo].[Articulos] a on a.idArticulo = npi.IdArticulo
JOIN
[dbo].[NotaPedidos] np ON npi.IdNotaPedido = np.IdNotaPedido
WHERE
np.FechaEmision >= DATEADD(YEAR, -@Years, CAST(GETDATE() AS DATE))
GROUP BY
npi.IdArticulo,
a.cantidad,
a.descripcion
)
SELECT
a.idArticulo,
a.Codigo,
a.descripcion,
c.IdCategoria,
c.Descripcion,
a.cantidad AS cantidad_en_stock,
s.Name as Proveedor,
s.Country as PaisProveedor,
y.SumCantidad as cantidad_vendida_en_periodo,
CASE
WHEN y.SumCantidad > a.cantidad THEN (y.SumCantidad-a.Cantidad) * a.preciounitario
ELSE 0
END AS costo_de_oportunidad,
CASE
WHEN a.cantidad <= y.SumCantidad THEN 'Necesita Reposicion'
ELSE 'Hay stock suficiente para periodo'
END AS estado,
y.UltimaCompra as ultima_compra
FROM
YearlyAverageSales y
JOIN
[dbo].[Articulos] a ON y.IdArticulo = a.idArticulo
JOIN
[dbo].[Categorias] c on c.IdCategoria = a.IdCategoria
JOIN
[dbo].[Suppliers] s on s.InternalId = a.proveedor
WHERE
a.discontinuado = 0 AND
((LEN('') = 0) OR (a.IdCategoria in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('', '[', ''), ']', ''), ','))))
AND ((LEN('') = 0) OR (a.Proveedor in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('', '[', ''), ']', ''), ','))))
AND ((LEN('') = 0) OR (s.Country in (SELECT value FROM STRING_SPLIT(REPLACE(REPLACE('', '[', ''), ']', ''), ','))))
AND (1 = 1 OR a.cantidad <= y.SumCantidad)
order by CASE
WHEN y.SumCantidad > a.cantidad THEN (y.SumCantidad-a.Cantidad) * a.preciounitario
end desc
I ran the query in SQL and works fine.
Any thoughts?