为了账号安全,请及时绑定邮箱和手机立即绑定

在一列上选择DISTINCT

/ 猿问

在一列上选择DISTINCT

繁花不似锦 2019-08-24 18:14:07

在一列上选择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]


查看完整描述

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


查看完整回答
反对 回复 2019-08-24
?
慕田峪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-%')

作为作者唯一的错误代码部分而不是问题的一部分。对于看这里的人来说,它不太可能有用。


查看完整回答
反对 回复 2019-08-24
?
智慧大石

试试这个:

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


查看完整回答
反对 回复 2019-08-24

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信