Sql Server Max функция на несколько столбцов? - PullRequest
1 голос
/ 31 марта 2011

Ниже приведены данные моей таблицы

 Mat   Phy Chem
 20 30  40
 25 35  35
 45 30  30
 45 40  35

Я хочу получить 3 максимальные строки всех трех столбцов в одной строке.

O / P

 Mat  Phy Chem
 45   40   40
 25   35   35
 20   30   30

Я использовал приведенный ниже запрос, но безуспешно, пожалуйста, помогите ...

Select distinct top 3 max(mat) from studata group by mat order by max(mat) desc
Union all
Select distinct top 3 max(phy) from studata group by phy order by max(phy) desc
Union all
Select distinct top 3 max(chem) from studata group by chem order by max(chem) desc

Ответы [ 2 ]

2 голосов
/ 31 марта 2011
WITH    q AS
        (
        SELECT  *,
                ROW_NUMBER() OVER (ORDER BY mat DESC) AS rn_mat,
                ROW_NUMBER() OVER (ORDER BY phy DESC) AS rn_phy,
                ROW_NUMBER() OVER (ORDER BY chem DESC) AS rn_chem
        FROM    mytable
        )
SELECT  q_mat.mat, q_phy.phy, q_chem.chem
FROM    q q_mat
JOIN    q q_phy
ON      q_phy.rn_phy = q_mat.rn_mat
JOIN    q q_chem
ON      q_chem.rn_chem = q_phy.rn_phy
WHERE   q_mat.rn_mat <= 3
0 голосов
/ 31 марта 2011

Работает ли это?

select distinct top 3 Mat
from studata
order by Mat desc

select distinct top 3 Phy
from studata
order by Phy desc

select distinct top 3 Chem
from studata
order by Chem desc

Причина, по которой вы, вероятно, получаете проблему, заключается в том, что max - это функция (она будет возвращать только 1 вещь), поэтому Select distinct top 3 max(mat) - нонсенс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...