【问题标题】:SQL Server getting unique values for each productSQL Server 获取每个产品的唯一值
【发布时间】:2014-02-19 06:39:58
【问题描述】:

我正在尝试查询其中不包含与其他产品具有相同折扣百分比的产品。我也想使用子查询。这是我想出的,但我收到一条错误消息,“子查询返回的值超过 1 个。当子查询遵循 =、!=、、>= 或当子查询用作表达式。”

SELECT ProductName,
 (SELECT DiscountPercent
 FROM Products
 GROUP BY DiscountPercent
 HAVING COUNT(DiscountPercent) = 1
 )
FROM Products

Fender Stratocaster 30.00
Gibson Les Paul 30.00
Gibson SG   52.00
Yamaha FG700S   38.00
Washburn D10S   0.00
Rodriguez Caballero 11  39.00
Fender Precision    30.00  
Hofner Icon 25.00
Ludwig 5-piece Drum Set with Cymbals    30.00
Tama 5-Piece Drum Set with Cymbals  15.00

【问题讨论】:

  • SELECT ProductName, (SELECT DiscountPercent FROM Products P1 where p1.ProductName=p.ProductName GROUP BY DiscountPercent HAVING COUNT(DiscountPercent) = 1) FROM Products P
  • 不对。我仍然在 3 个产品上获得 3 个相同的值
  • 提供样本数据以获得准确的结果。 select * from (select *,row_number()over partition by(ProductName,DiscountPercent order by ProductName)rn from Products)t4 where rn=1
  • 我提供了上面的示例数据
  • 你使用的是什么版本的sql server?如果它是 sql server 2012,您可以在查询中检查返回的前一行,例如:min(discount) OVER (ORDER BY [discount] ROWS UNBOUNDED PRECEDING。在互联网上查看更多详细信息。如果您有 2005+并且您应该在重复查询中调查的行数不太多

标签: sql-server unique-values


【解决方案1】:

试试这个,

select * from (
select *,row_number()over (partition by Discount order by ProductName)rn from @t
)t4 where rn=1

【讨论】:

    【解决方案2】:
    SELECT 
    [ProductName],
    [DiscountPercent]
    FROM
    (
    SELECT ROW_NUMBER() OVER (PARTITION BY DiscountPercent ORDER BY ProductName) AS [ProductRank],
    [ProductName],
    [DiscountPercent]
    FROM
    [Products]
    ) AS Data
    WHERE [ProductRank] = 1
    

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 2021-09-06
      • 2013-01-28
      相关资源
      最近更新 更多