【问题标题】:How to use SELECT DISTINCT and SELECT TOP n in T-SQL如何在 T-SQL 中使用 SELECT DISTINCT 和 SELECT TOP n
【发布时间】:2014-09-27 18:18:11
【问题描述】:

我有这个问题:

ALTER PROCEDURE [dbo].[MySP]
    @Q Nvarchar(512)
AS BEGIN

SET @Q = REPLACE(@Q, N'%', N'');
SET @Q = N'"' + @Q + N'*' + N'"';

SELECT TOP 8 
       [KeywordId] as ID,
       [Keyword] as lable,
       [Keyword] as value
  FROM [dbo].[News_Keywords]
  WHERE CONTAINS ([Keyword], @Q)
  ORDER BY SortOrder, len([Keyword])

END

我要问的是如何将DISTINCT 功能(在[Keyword] 列上)应用于此语句?这完全让我感到困惑!提前致谢。

【问题讨论】:

  • 您能添加一些示例数据和想要的结果吗?

标签: sql sql-server tsql distinct


【解决方案1】:

您可以使用group by 代替distinct。但是,您必须决定将SortOrder 放在哪里。这是一种方法:

SELECT TOP 8 [KeywordId] as ID, [Keyword] as label, [Keyword] as value
FROM [dbo].[News_Keywords]
WHERE CONTAINS ([Keyword], @Q)
GROUP BY KeywordId, KeyWord, SortOrder
ORDER BY SortOrder, len([Keyword]);

这是另一个:

SELECT TOP 8 [KeywordId] as ID, [Keyword] as label, [Keyword] as value
FROM [dbo].[News_Keywords]
WHERE CONTAINS ([Keyword], @Q)
GROUP BY KeywordId, KeyWord
ORDER BY MAX(SortOrder), len([Keyword]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多