需要帮助选择适当的列以在SQL中输出

时间:2018-10-31 03:51:22

标签: sql-server tsql

dplyr

我所拥有的是一个SQL查询,意在获得一种产品和有史以来的最高价格。但是,问题在于我的第一列是产品的ID(p.ProductID),我希望第一列是产品的名称(p.name)。我不能简单地按产品名称分组,因为尽管某些产品具有相同的名称,但它们具有不同的ID。

据我所知,上面的查询为我提供了正确的输出,我将如何检索名称而不是ID?

3 个答案:

答案 0 :(得分:0)

您可以PTHREAD_MUTEX_INITIALIZERGROUP BY的组合:

ProductID

这种组合应该仍然是唯一的,因为理想情况下,给定的name应该只映射到一个名称。

如果您确实只想显示SELECT p.ProductID, p.name, MAX(hist.Cost) AS 'MaxPrice' FROM Product AS p INNER JOIN ProductCostHistory AS hist ON p.ProductID = hist.ProductID GROUP BY p.ProductID, p.name; 和最高价格,则可以对上述答案进行子查询,并仅选择ProductIDname。但是,这可能会导致一个给定名称的多个记录,因此您将无法将一个记录与另一个记录分开。

旁注:除非有其他令人信服的理由,否则请尝试使用显式联接语法。

答案 1 :(得分:0)

您可以在同一张表中使用Sub查询和INNER JOIN来满足您的要求-

select p.name,temp_prod.ProductID,temp_prod.cost as highes_cost from Product 
INNER JOIN (
       select  
          p.ProductID, max(hist.Cost) as cost as 'MaxPrice'
       from
          Product as p, ProductCostHistory as hist
       where   
          p.ProductID = hist.ProductID
       group by    
          p.ProductID
          )temp_prod ON
( temp_prod.ProductID = Product.ProductID )

答案 2 :(得分:0)

您可以按照以下方式进行操作:

SELECT p.ProductId, 
    p.Name, 
    (SELECT MAX(cost) FROM ProductCostHistory as hist where p.ProductID = hist.ProductID)
FROM Product as p

SELECT p.ProductId, t2.cost, p.Name
FROM Product as p
INNER JOIN (
    SELECT productId, MAX(cost) FROM ProductCostHistory 
      group by ProductId) t2
    ON p.ProductId = t2.Productid