对于一个学校项目,我需要在MS SQL Server中创建一些数据库,创建一些视图,并管理用户访问权限。事实是,我们的课程确实是空的,我在MS SQL Server的某些机制上遇到了麻烦
我为2018年世界杯足球赛的每位球员提供一张桌子,我想选20名最矮的球员,所以我只想使用ORDER BY Person.Height。如果我使用它,我的结果将是这样的:
62 165 Panama QA19
63 165 SaudiArabia AY8
78 165 Switzerland SX23
59 166 Mexico AJ20
etc...
但是我只想选择最矮的球员,并按国家(而不是身高)排序,所以有这样的东西
69 168 Argentina SE18
66 168 Argentina LM15
67 166 Brazil CF22
64 169 Brazil RF18
国家/地区按字母顺序排列的20个最矮的球员
这是我现在拥有的代码,这给了我第一个结果
SELECT TOP (20) Person.Weight, Person.Height, Country.NameCountry,
LEFT(Person.Name, 1)+LEFT(Person.FirstName, 1)+CAST(Player.Numero AS
nvarchar(MAX)) AS Initiales
FROM Person INNER JOIN Country
ON Person.CountryId = Country.CountryID
INNER JOIN Player
ON Person.PersonID = Player.PersonID
WHERE -----------------
ORDER BY Person.Height, Country.NameCountry
如果我在WHERE子句中使用MIN(Person.Height),则会出现此错误:除非在HAVING子句或选择列表中包含的子查询中,否则聚合可能不会出现在WHERE子句中,并且正在汇总的列是外部参考。 但是我不需要任何HAVING OR GROUP BY子句,所以我真的不明白我应该做什么。 我知道我的解释不是很清楚,但是如果有人可以帮助我,那将非常好
答案 0 :(得分:0)
尝试使用子查询
SELECT * FROM (
SELECT Person.Weight, Person.Height, Country.NameCountry,
LEFT(Person.Name, 1)+LEFT(Person.FirstName, 1)+CAST(Player.Numero AS
nvarchar(MAX)) AS Initiales
FROM Person INNER JOIN Country
ON Person.CountryId = Country.CountryID
INNER JOIN Player
ON Person.PersonID = Player.PersonID
WHERE -----------------
ORDER BY Person.Height
LIMIT 0,20)
ORDER NameCountry
答案 1 :(得分:0)
好吧,使用子查询效果很好,谢谢Omar Matijas