SELECT DISTINCT em uma coluna

Usando o SQL Server, eu tenho …

ID SKU PRODUCT ======================= 1 FOO-23 Orange 2 BAR-23 Orange 3 FOO-24 Apple 4 FOO-25 Orange 

eu quero

 1 FOO-23 Orange 3 FOO-24 Apple 

Essa consulta não está me levando até lá. Como posso SELECT DISTINCT em apenas uma coluna?

 SELECT [ID],[SKU],[PRODUCT] FROM [TestData] WHERE ([PRODUCT] = (SELECT DISTINCT [PRODUCT] FROM [TestData] WHERE ([SKU] LIKE 'FOO-%')) ORDER BY [ID] 

Supondo que você esteja no SQL Server 2005 ou superior, você pode usar um CTE com ROW_NUMBER ():

 SELECT * FROM (SELECT ID, SKU, Product, ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY ID) AS RowNumber FROM MyTable WHERE SKU LIKE 'FOO%') AS a WHERE a.RowNumber = 1 

A solução mais simples seria usar uma subconsulta para encontrar o ID mínimo correspondente à sua consulta. Na subconsulta, você usa GROUP BY vez de DISTINCT :

 SELECT * FROM [TestData] WHERE [ID] IN ( SELECT MIN([ID]) FROM [TestData] WHERE [SKU] LIKE 'FOO-%' GROUP BY [PRODUCT] ) 

tente isto:

 SELECT t.* FROM TestData t INNER JOIN (SELECT MIN(ID) as MinID FROM TestData WHERE SKU LIKE 'FOO-%' ) dt ON t.ID=dt.MinID 

EDITAR
uma vez que o OP corrigiu sua saída de samle (anteriormente tinha apenas uma linha de resultado, agora tudo foi mostrado), esta é a consulta correta:

 declare @TestData table (ID int, sku char(6), product varchar(15)) insert into @TestData values (1 , 'FOO-23' ,'Orange') insert into @TestData values (2 , 'BAR-23' ,'Orange') insert into @TestData values (3 , 'FOO-24' ,'Apple') insert into @TestData values (4 , 'FOO-25' ,'Orange') --basically the same as @Aaron Alton's answer: SELECT dt.ID, dt.SKU, dt.Product FROM (SELECT ID, SKU, Product, ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY ID) AS RowID FROM @TestData WHERE SKU LIKE 'FOO-%' ) AS dt WHERE dt.RowID=1 ORDER BY dt.ID 

Eu sei que foi perguntado há mais de 6 anos, mas o conhecimento ainda é conhecimento. Essa é uma solução diferente de todas as anteriores, já que tive que executá-la no SQL Server 2000:

 DECLARE @TestData TABLE([ID] int, [SKU] char(6), [Product] varchar(15)) INSERT INTO @TestData values (1 ,'FOO-23', 'Orange') INSERT INTO @TestData values (2 ,'BAR-23', 'Orange') INSERT INTO @TestData values (3 ,'FOO-24', 'Apple') INSERT INTO @TestData values (4 ,'FOO-25', 'Orange') SELECT DISTINCT [ID] = ( SELECT TOP 1 [ID] FROM @TestData Y WHERE Y.[Product] = X.[Product]) ,[SKU]= ( SELECT TOP 1 [SKU] FROM @TestData Y WHERE Y.[Product] = X.[Product]) ,[PRODUCT] FROM @TestData X 
 SELECT min (id) AS 'ID', min(sku) AS 'SKU', Product FROM TestData WHERE sku LIKE 'FOO%' -- If you want only the sku that matchs with FOO% GROUP BY product ORDER BY 'ID' 

Tente isto:

SELECT * FROM [TestData] WHERE Id IN(SELECT DISTINCT MIN(Id) FROM [TestData] GROUP BY Product)