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

在一列上选择DISTINCT

在一列上选择DISTINCT

繁花不似锦 2019-08-24 18:14:07
在一列上选择DISTINCT使用SQL Server,我有......ID  SKU     PRODUCT=======================1   FOO-23  Orange2   BAR-23  Orange3   FOO-24  Apple4   FOO-25  Orange我想要1   FOO-23  Orange3   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 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

假设您使用的是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

TA贡献1794条经验 获得超7个赞

这是一个版本,基本上与其他几个答案相同,但是您可以将粘贴复制到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
?
智慧大石

TA贡献1946条经验 获得超3个赞

试试这个:

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


查看完整回答
反对 回复 2019-08-24
  • 3 回答
  • 0 关注
  • 569 浏览
慕课专栏
更多

添加回答

举报

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