这是我的SQL命令:
select name
from students
where marks > 75
order by right(name,3)
输出:
Vivek
Belvet
Devil
Evil
我不希望看到最后3个字符在de vil 和e vil 等字词中相同。我只想看到魔鬼。
答案 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)
您可以使用MIN
或MAX
执行此操作,如下所示:
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