gpt4 book ai didi

sql - 将查询转换为 View 或表值函数

转载 作者:行者123 更新时间:2023-12-02 08:51:50 25 4
gpt4 key购买 nike

我想为所有产品获取最便宜的产品变体。对于一种产品,这很容易,但我无法全神贯注地为所有产品做这件事,而且我不想使用光标。

select top 1
pv.VariantID
from
ProductVariant pv
inner join (select min(price) as Price from productvariant where ProductID = @ProductID) pr
on pv.Price = pr.Price
where
pv.ProductID = @ProductID

如果 2 个表具有以下结构,则此方法有效:

Product - ProductID
ProductVariant - ProductID, VariantID, Price

我知道你可以做到这一点,有人知道怎么做吗?

将上述查询转换为标量函数并使用它的最佳方法是什么?所以它会变成:

select
ProductID
, dbo.NewFunction(ProductID)
from
Product

最佳答案

SELECT ProductID, MIN(Price) MinPrice
FROM Product JOIN ProductVariant ON Product.ProductID = ProductVariant.ProductID
GROUP BY ProductID

这将为您提供最低价格。如果您想要随附的 VariantID,则需要再次加入 - 但是每个 VariantID 的价格是唯一的吗?

SELECT VariantID, ProductID, MinPrice
FROM ProductVariant JOIN
(SELECT ProductID, MIN(Price) MinPrice
FROM Product JOIN ProductVariant ON Product.ProductID = ProductVariant.ProductID
GROUP BY ProductID) min_price
ON ProductVariant.ProductID = min_price.ProductID AND ProductVariant.Price = min_price.MinPrice

如果每个变体的价格不是唯一的,这将无法正常工作 - 具体来说,您会得到重复的。如果发生这种情况,您可以将其更改为:

SELECT MIN(VariantID) SmallestVariantID, ProductID, MinPrice
FROM ProductVariant JOIN
(SELECT ProductID, MIN(Price) MinPrice
FROM Product JOIN ProductVariant ON Product.ProductID = ProductVariant.ProductID
GROUP BY ProductID) min_price
ON ProductVariant.ProductID = min_price.ProductID AND ProductVariant.Price = min_price.MinPrice
GROUP BY ProductID, MinPrice

这将从重复项中选择最小的变体 ID。

关于sql - 将查询转换为 View 或表值函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7992389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com