Выбрав 7-го человека (строка) и получите 7 в результате - PullRequest
1 голос
/ 23 марта 2020

Я хочу выбрать 7-го человека (Пьер Гасли (например)) Список очков Сезон F1 , поэтому я могу вернуть номер 7 в моем C# приложении.

SELECT CONCAT(strVoorNaam, strTussenVoegsel, ' ',  strAchterNaam) AS Naam, SUM(CAST(tblPunten.strScore AS INT)) AS score
FROM tblPunten
JOIN tblPuntenCoureur ON tblPuntenCoureur.PuntenID = tblPunten.ID
JOIN tblPersoon ON tblPersoon.ID = tblPuntenCoureur.PersoonID
JOIN tblSeizoen ON tblSeizoen.ID = tblPuntenCoureur.SeizoenID
WHERE tblPunten.ID != 12 AND tblPunten.ID != 13 AND  tblPunten.ID != 14 AND  tblPunten.ID != 15
AND  tblPunten.ID != 16 AND  tblPunten.ID != 17 AND  tblPunten.ID != 18 AND  tblPunten.ID != 19 AND tblSeizoen.intJaartal = 2019 
GROUP BY CONCAT(strVoorNaam, strTussenVoegsel, ' ',  strAchterNaam), tblPersoon.strAchterNaam
ORDER BY score DESC

1 Ответ

1 голос
/ 23 марта 2020

Используйте предложение ограничения строки:

select 
    concat(strvoornaam, strtussenvoegsel, ' ',  strachternaam) as naam, 
    sum(cast(pu.strscore as int)) as score
from tblpunten pu
join tblpuntencoureur pc on pc.puntenid = pu.id
join tblpersoon pe on pe.id = pc.persoonid
join tblseizoen se on se.id = pc.seizoenid
where pu.id not between 12 and 19 and se.intjaartal = 2019 
group by strvoornaam, strtussenvoegsel, strachternaam, pe.strachternaam
order by score desc
offset 6 rows fetch next 1 row only

Это даст вам седьмую строку в наборе результатов.

Примечания:

  • псевдонимы таблиц помогают сделать запрос лаконичным и простым для написания
  • вы должны квалифицировать все столбцы, которые входят в играть в запросе

С другой стороны, если вы пытаетесь получить звание определенного c человека, то это другое. Вы можете использовать rank() вместо:

select *
from (
    select 
        concat(strvoornaam, strtussenvoegsel, ' ',  strachternaam) as naam, 
        sum(cast(pu.strscore as int)) as score,
        rank() over(order by sum(cast(pu.strscore as int)) desc) rn
    from tblpunten pu
    join tblpuntencoureur pc on pc.puntenid = pu.id
    join tblpersoon pe on pe.id = pc.persoonid
    join tblseizoen se on se.id = pc.seizoenid
    where pu.id not between 12 and 19 and se.intjaartal = 2019 
    group by strvoornaam, strtussenvoegsel, strachternaam, pe.strachternaam
) t
where naam = 'Pierre Gasly'
...