选择具有相同描述的行中价格不变的所有产品行

问题描述 投票:0回答:1

假设您有一个名为 ProductsTable 的表,其结构如下:

ProductID: int (key)
ProductDesc: varchar
Price: int

现在,假设所有行中的 ProductDesc 可以相等。因此,您可以有两种同名的产品,例如“APPLE”。然而,它们的价格可能不同。(这最终对我们的设计来说是有意义的,因为我没有提到很多其他列有其他数据,所以价格和描述可能是相同的,但其他元素产品不同。)

我只是想找到所有ProductID,其中ProductDesc在所有产品中都相同,并且价格对于所有产品都相同。换句话说,同一产品的价格不会改变。我想找到任何没有可变价格的产品。

Apple 5.0
Apple 5.0
Apple 5.0
Pear 3.0
Pear 4.0

在上面的数据示例中,我将仅返回与 Apple 相对应的 ProductId,而不返回 Pear,因为 Pear 的价格在条目之间会发生变化。

我认为这需要 CTE 和/或 StdDev 的一些用法,但我不确定如何将语法组合在一起。这是我对伪代码的尝试:

SELECT a.* FROM ProductsTable a WHERE a.Price = (SELECT b.ProductPrice FROM ProductsTable b WHERE b.ProductDesc LIKE a.ProductDesc)

但我认为这只会比较前两行。我想找到具有相同产品描述的all行之间根本没有不同价格的所有产品。

sql sql-server
1个回答
0
投票

可能会选择价格不变的产品ID,然后获取有关这些ID的信息,例如:

SELECT a.* FROM ProductsTable a 
WHERE a.ProductID IN (
                      SELECT ProductID FROM ProductsTable
                      GROUP BY ProductID 
                      HAVING MIN(Price) = MAX(Price))
© www.soinside.com 2019 - 2024. All rights reserved.