sql选择具有不同的顺序标记75

时间:2016-11-01 08:05:49

标签: sql sql-server tsql

这是我的SQL命令:

select name
from students
where marks > 75
order by right(name,3)

输出:

Vivek 
Belvet 
Devil 
Evil

我不希望看到最后3个字符在de vil 和e vil 等字词中相同。我只想看到魔鬼。

3 个答案:

答案 0 :(得分:2)

您可以使用NOT EXISTS来避免两个名称以相同的最后3个字符结尾:

select name
from students s1
where marks > 75
  and not exists (select 1 from students s2
                  where s2.marks > 75
                    and right(s2.name,3) = right(s1.name,3)
                    and s2.name < s1.name)
order by right(name,3)

只会返回前3个字符相同的名字。

答案 1 :(得分:1)

您可以使用MINMAX执行此操作,如下所示:

DECLARE @DataSource TABLE
(
    [value] VARCHAR(12)
);

INSERT INTO @DataSource ([value])
VALUES ('Vivek')
      ,('Belvet')
      ,('Helvet')
      ,('Devil')
      ,('Petko')
      ,('Zetko')
      ,('Evil');

 SELECT MIN([value])
 FROM @DataSource
 GROUP BY RIGHT([value], 3);

MIN将为您提供名字,以升序排序名称,而MAX则相反。

答案 2 :(得分:0)

你可以这样做,但是你应该指明为什么I want to see only devil.,而不是邪恶......下面的代码任意选择

;with cte
as
(
select *,
dense_rank() over (order by right(name,3) as rnk
from
table where marks>75
)
select * from cte where rnk=1