【问题标题】:Trying to find minimal value with CTE试图用 CTE 找到最小值
【发布时间】:2017-05-19 18:53:16
【问题描述】:

我需要找到最便宜的值,然后检索有关该值的信息。我试图通过使用 CTE 检索最便宜的项目,然后使用 INNER JOIN 检索项目信息来获得此信息,但我得到的是 3 条记录而不是单条记录。如何获得单条记录?

  ;WITH GroupedData AS (
SELECT c.SparePartId, MIN(c.Price) AS MinPrice FROM Catalogue c
    WHERE c.SparePartId  = @SparePartId
    GROUP BY c.SparePartId
    )
  SELECT DISTINCT sp.Id, gd.MinPrice, sp.Name, Image
  FROM SpareParts sp
  INNER JOIN Photos p ON sp.Id = p.SparePartId
  INNER JOIN GroupedData gd ON sp.Id = gd.SparePartId

【问题讨论】:

  • 也许你有三个Photos 对应SpareParts.Id

标签: sql tsql group-by common-table-expression


【解决方案1】:

由于您的 group by 和您在 CTE 中的 WHERE 要求结果是单个记录:

SELECT c.SparePartId, MIN(c.Price) AS MinPrice FROM Catalogue c
WHERE c.SparePartId  = @SparePartId
GROUP BY c.SparePartId

而且由于您的spareparts 表中的每个sparepart 不太可能有多个记录。那么到photos 的INNER JOIN 一定会导致记录膨胀,这意味着对于您的@SparePArtID,您必须拥有三个Photos 记录。

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2018-12-28
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多