Если вам нужно передать несколько SKU, вы можете использовать табличную переменную:
DECLARE @SDate date
SET @SDate = '01/01/2018'
DECLARE @EDate date
SET @EDate = '12/31/2018'
DECLARE @Skus table (SKU varchar(20);
INSERT INTO @SKUs
VALUES('SN1580'),
('SN0350');
SELECT SIL.[No_] AS SKU,
SUM(SIL.Amount) AS Amount,
SUM(SIL.Quanity) AS Quantity
FROM dbo.[Threshold Enterprises$Sales Invoice Line] SIL --I recommeond against special characters (including white space) in object names
JOIN @SKUs S ON SIL.[No_] = S.SKU
WHERE SIL.[Shipment Date] BETWEEN @SDate AND @EDate
GROUP BY SIL.[No_];
Если это приложение, использующее этот параметризованный запрос, вам может потребоваться создать определенный пользователем тип таблицы и затем использоватьчто:
CREATE TYPE dbo.SKUs AS TABLE (SKU varchar(20));
В документации Microsoft описано, как их использовать в Табличных параметрах .
Изменить, примечание, если в вашем столбце [Shipment Date]
есть обе датыи значения времени (и время может быть значением, отличным от 00:00:00
), которое я предлагаю против BETWEEN
.Это происходит потому, что в любое время после полуночи последнего дня между этими двумя датами не будет.Например, 2018-04-30 00:00:00.003
не находится между 2018-04-01
и 2018-04-30
.
Если у вас действительно есть значения даты и времени, я предлагаю использовать это предложение:
WHERE SIL.[Shipment Date] >= @SDate
AND SIL.[Shipment Date] < DATEADD(DAY, 1, @EDate)