如何在SQL Server中只获取一个具有相同ID的项目?

时间:2016-08-01 17:13:01

标签: sql-server

我有一张桌子,名称产品:

ProductId    ProductName    CategoryId
   1            Tshirt        1
   2            Jeans         1
   3            Tops          2
   4            Lipstick      2 

我想输出这样的东西:

ProductId    ProductName   CategoryId
 1             Tshirt            1
 3              Tops             2

这意味着每个类别只有一个项目。是否可以使用SQL查询执行此操作?

2 个答案:

答案 0 :(得分:2)

你可以使用RowNumber()函数,但是我使用它的方式会为每个CategoryID选择一个随机的第一个Product。

如果您希望更好地控制应该选择的ProductName,请使用正确的ORDER BY ColumnName代替ORDER BY (SELECT NULL)

SELECT ProductId    
      ,ProductName
      ,CategoryId
FROM (
      SELECT *
         ,ROW_NUMBER() OVER (PARTITION BY CategoryID ORDER BY (SELECT NULL)) rn
      FROM TableName 
     ) A
WHERE rn = 1

答案 1 :(得分:1)

使用窗口函数:

WITH AdditionalNumbering AS
(
    SELECT ProductId, ProductName, CategoryID,
    ROW_NUMBER() OVER (PARTITION BY CategoryID ORDER BY ProductID) RowNumber
)
SELECT ProductId, ProductName, CategoryID
FROM AdditionalNumbering
WHERE RowNumber=1