2012-05-02 2 views
2
SELECT top 5 
day_description, 
count(numberofdays) as number 

FROM mytable 

where department = 'departmentname' 

group by day_description 

мой выбор приносит что-то вроде этого: сзадиДобавление номера идентификатора в таблице

day description   number   
holiday      32    
working day     212    
training day    5     
meeting day     26    
admin day     66 

Есть ли способ добавления нового столбца, где asigns либо 1-5, 1 является самым высоким значением строка, а 5 - наименьшая строка значений. И выглядит следующим образом:

day description   number   top5ID 
holiday      32    3 
working day     212    1 
training day    5    5 
meeting day     26    4 
admin day     66    2 
+0

Какая версия sql-server вы используете? – Arion

+0

Какую цель? Он знает, какая строка выше? –

+0

Я использую это в SSRS BIDS для создания барчарта, я хочу иметь возможность указывать цвета каждого бара в зависимости от их верхнего 5-го положения. – JsonStatham

ответ

5

Может быть что-то вроде этого:

;WITH CTE 
AS 
(
    SELECT top 5 
     day_description, 
     count(numberofdays) as number 
    FROM mytable 
    where department = 'departmentname' 
    group by day_description 
) 
SELECT 
    ROW_NUMBER() OVER(ORDER BY CTE.number DESC) AS Top5ID, 
    CTE.* 
FROM 
    CTE 

Или без КТР:

SELECT 
    ROW_NUMBER() OVER(ORDER BY t.number DESC) AS Top5ID, 
    t.* 
FROM 
    (
     SELECT top 5 
     day_description, 
     count(numberofdays) as number 
     FROM mytable 
     where department = 'departmentname' 
     group by day_description 
    ) AS t 
+2

Это работает, хотя ставит самое высокое значение как 5, а не 1 – JsonStatham

+0

Простите. Я обновил ответ. Повторите попытку: P – Arion

1

Таким образом, вы можете использовать его:

SELECT TOP 5 day_description, COUNT(numberofdays) AS number, 
ROW_NUMBER() OVER(ORDER BY COUNT(numberofdays) DESC) AS Top5ID 
FROM mytable 
WHERE department = 'departmentname' 
GROUP BY day_description 
ORDER BY COUNT(numberofdays) DESC 
Смежные вопросы