我得到了717个SKU的清单,这些清单必须将“年销售额”和“已售出单位”的总值相加。我开发了一个代码,可以按年份搜索SKU并接收总金额。我想知道是否可以循环输入更多的SKU,这样我就不必逐个SKU逐一检查。
我熟悉Loop语句,但不是执行它们的最佳人选。想知道Microsoft SQL Server Management Studio 2017中是否有办法做到这一点。
我尝试过声明并重复代码,但是效率很低。
DECLARE @SDate date
SET @SDate = '01/01/2018'
DECLARE @EDate date
SET @EDate = '12/31/2018'
DECLARE @Sku varchar(20)
SET @Sku = 'SN1580'
SELECT SUM(Amount) AS EXPR1
FROM dbo.[Threshold Enterprises$Sales Invoice Line]
WHERE ([Shipment Date] BETWEEN @SDate AND @EDate) AND (No_ = N'SN1580')
SELECT SUM(Quantity) AS EXPR1
FROM dbo.[Threshold Enterprises$Sales Invoice Line]
WHERE ([Shipment Date] BETWEEN @SDate AND @EDate) AND (No_ = N'SN1580')
SELECT SUM(Amount) AS EXPR1
FROM dbo.[Threshold Enterprises$Sales Invoice Line]
WHERE ([Shipment Date] BETWEEN @SDate AND @EDate) AND (No_ = N'SN0350')
SELECT SUM(Quantity) AS EXPR1
FROM dbo.[Threshold Enterprises$Sales Invoice Line]
WHERE ([Shipment Date] BETWEEN @SDate AND @EDate) AND (No_ = N'SN0350')
Run Code Online (Sandbox Code Playgroud)
期望结果能给我一些类似的东西
SN1234
Amount 1000
Sum 200
SN3456
Amount 2000
Sum 100
Run Code Online (Sandbox Code Playgroud)
或者是否有一种方法可以将结果轻松导出为excel。
如果您需要传递多个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_];
Run Code Online (Sandbox Code Playgroud)
如果这是使用此参数化查询的应用程序,则可能需要创建用户定义的表类型,然后使用该表类型:
CREATE TYPE dbo.SKUs AS TABLE (SKU varchar(20));
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |