单列上的DISTINCT TOP 10

时间:2017-08-15 12:48:25

标签: sql sql-server

以下SQL语句不起作用,我不知道如何纠正它:

<rule name="redirect to home without referer" stopProcessing="true">
    <match url="^login$" />
    <conditions>
        <add input="{HTTP_REFERER}" pattern="http://www.example.com" negate="true" />
    </conditions>
    <action type="Redirect" url="http://www.example.com/" />
</rule>

如果我删除TOP 10则会返回结果,否则我会

  

关键字“TOP”附近的语法不正确。

是否可以在单个列上应用select a0.TEST as TEST, count(DISTINCT TOP 10 a0.TEST_CLMN) as CC from dbo.TESTING a0 group by TEST DISTINCT

编辑: TOP 10必须在选择之后吗?

4 个答案:

答案 0 :(得分:1)

您可能希望计算不同的值并从您的组中获得前10个结果:

select top 10
  a0.test,
  count(distinct a0.test_clmn) as cc
from dbo.testing a0
group by a0.test
order by cc desc

答案 1 :(得分:1)

以下是我从您的查询中了解到的内容: 您希望为每个test_clmn获取test的不同值的数量,但如果有超过10个不同的值,您只需要将10作为计数结果。

如果这是真的,你可以这样做:

SELECT  test, 
        CASE WHEN COUNT(DISTINCT test_clmn) > 10 THEN
            10
        ELSE
            COUNT(DISTINCT test_clmn)
        END As CountDistinct
FROM dbo.testing
GROUP BY test

但是,正如我在问题的评论中写的那样 - 发布的查询没有多大意义,所以这只是猜测。

答案 2 :(得分:0)

尝试这样的事情:

select distinct top 10 a0.TEST as TEST
from dbo.TESTING a0

答案 3 :(得分:0)

尝试:

>>> res
[['1', '1', '1'], ['4', '5', '8']]