在一列上选择DISTINCT

在一列上选择DISTINCT

使用SQL Server,我有......


ID  SKU     PRODUCT

=======================

1   FOO-23  Orange

2   BAR-23  Orange

3   FOO-24  Apple

4   FOO-25  Orange

我想要


1   FOO-23  Orange

3   FOO-24  Apple

这个问题不是让我在那里。如何在一列上选择DISTINCT?


SELECT 

[ID],[SKU],[PRODUCT]

FROM [TestData] 

WHERE ([PRODUCT] = 

(SELECT DISTINCT [PRODUCT] FROM [TestData] WHERE ([SKU] LIKE 'FOO-%')) 

ORDER BY [ID]


繁花不似锦
浏览 575回答 3
3回答

白衣非少年

假设您使用的是SQL Server 2005或更高版本,则可以使用带有ROW_NUMBER()的CTE:SELECT  *FROM    (SELECT ID, SKU, Product,                 ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY ID) AS RowNumber         FROM   MyTable         WHERE  SKU LIKE 'FOO%') AS aWHERE   a.RowNumber = 1

慕田峪9158850

这是一个版本,基本上与其他几个答案相同,但是您可以将粘贴复制到SQL Server Management Studio中进行测试(并且不会生成任何不需要的表),这要归功于一些内联值。WITH [TestData]([ID],[SKU],[PRODUCT]) AS(     SELECT *     FROM (         VALUES         (1,   'FOO-23',  'Orange'),         (2,   'BAR-23',  'Orange'),         (3,   'FOO-24',  'Apple'),         (4,   'FOO-25',  'Orange')     )     AS [TestData]([ID],[SKU],[PRODUCT]))SELECT * FROM [TestData] WHERE [ID] IN (     SELECT MIN([ID])      FROM [TestData]      GROUP BY [PRODUCT])结果ID  SKU     PRODUCT1   FOO-23  Orange3   FOO-24  Apple我忽略了以下......WHERE ([SKU] LIKE 'FOO-%')作为作者唯一的错误代码部分而不是问题的一部分。对于看这里的人来说,它不太可能有用。

智慧大石

试试这个:SELECT * FROM [TestData] WHERE Id IN(SELECT DISTINCT MIN(Id) FROM [TestData] GROUP BY Product)   
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server