SQL Server 新手问题在这里!我有 3 个表,tbl_Sales、tbl_SalesItems、tbl_Products。tbl_SalesItems 存储添加到每个销售的产品,并通过产品代码加入到 tbl_Products。tbl_Products 中的产品按 ProductGroup 字段分类。环境方面,任何时候都有大约 200 次销售,每次销售 4-5 件商品和 3000 种产品。尽管记录数量很少,但 Sales 和 SalesItems 数据不断变化,在实时环境中每天将进行数百次计算,响应时间至关重要。
我想根据某些产品组的销售商品数量对每次销售进行分类,具体来说:
如果有 1 件产品组 13 和 0 件产品组 14 和 0 件产品组 16,则销售是 Type1。
如果具有产品组 13 的 0 件商品和产品组 14 的 1 件商品和产品组 16 的 0 件商品,则销售为 Type2。
其他销售是 Type0
如果我使用 Access/VBA,我将创建一个包含 3 个记录的记录集,作为 3 个产品组中每一个的销售中的项目计数,然后遍历记录以获取我的值并确定类型。
我不确定这在 sql server 函数或存储过程中是否可行?目前我正在运行三个单独的 SELECT 语句,然后像这样评估结果:
ALTER FUNCTION [dbo].[fSaleATCType] ( @SaleID int)
RETURNS tinyint
BEGIN
declare @InOutWashCount int
declare @OutWashCount int
declare @ExtraCount int
declare @ATCType tinyint
SET @InOutWashCount =
(
SELECT COUNT(dbo.tbl_SalesItems.SaleItemCode) AS CountItems
FROM dbo.tbl_SalesItems LEFT OUTER JOIN
dbo.tbl_Products ON dbo.tbl_SalesItems.SaleItemCode = dbo.tbl_Products.ProductCode
WHERE (dbo.tbl_SalesItems.SaleID = @SaleID) AND (dbo.tbl_Products.ProductGroup = 13)
)
SET @OutWashCount =
(
SELECT COUNT(dbo.tbl_SalesItems.SaleItemCode) AS CountItems
FROM dbo.tbl_SalesItems LEFT OUTER JOIN
dbo.tbl_Products ON dbo.tbl_SalesItems.SaleItemCode = dbo.tbl_Products.ProductCode
WHERE (dbo.tbl_SalesItems.SaleID = @SaleID) AND (dbo.tbl_Products.ProductGroup = 14)
)
SET @ExtraCount =
(
SELECT COUNT(dbo.tbl_SalesItems.SaleItemCode) AS CountItems
FROM dbo.tbl_SalesItems LEFT OUTER JOIN
dbo.tbl_Products ON dbo.tbl_SalesItems.SaleItemCode = dbo.tbl_Products.ProductCode
WHERE (dbo.tbl_SalesItems.SaleID = @SaleID) AND (dbo.tbl_Products.ProductGroup = 16)
)
SET @ATCType = 0
if @InOutWashCount = 1 and @OutWashCount = 0 and @ExtraCount = 0
SET @ATCType = 1
if @InOutWashCount = 0 and @OutWashCount = 1 and @ExtraCount = 0
SET @ATCType = 2
RETURN @ATCType
END
并从中做三个SELECT?
这是最好的方法吗?我会更好地创建一个 temptable,然后从中执行三个 SELECT 吗?或创建一个像
SELECT dbo.tbl_SalesItems.SaleID,
dbo.tbl_Products.ProductGroup,
COUNT(dbo.tbl_SalesItems.SaleItemCode) AS CountItems
FROM dbo.tbl_SalesItems LEFT OUTER JOIN
dbo.tbl_Products ON dbo.tbl_SalesItems.SaleItemCode = dbo.tbl_Products.ProductCode
GROUP BY dbo.tbl_Products.ProductGroup,
dbo.tbl_SalesItems.SaleID
并从中做三个SELECT?
谢谢阅读!我希望这是有道理的,任何建议都将不胜感激!
比格吉姆