我有一张桌子,名称产品:
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查询执行此操作?
答案 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