2017-02-16 11 views
1

мне нужен конечный результат:Как создать запрос в SQL Server 2008 R2

enter image description here

я использовал

max(value) OVER (PARTITION BY name order by value) 

, но не поддерживается в SQL Server 2008 R2

в результат первый: 'a', потому что максимальное значение и следующая запись все 'a'
секунда: «D», потому что второе значение макс и следующая запись всех «d»

+1

Обеспечение образцы данных и желаемые результаты. Кроме того, что вы пробовали до сих пор и что не работает? –

+1

«но не работает» ничего нам не говорит: ошибка? неожиданные результаты? или что-то другое? – Richard

+0

не поддерживается в разделе PARTITION BY – Saber

ответ

0

Попробуйте это:

WITH cte1 AS (
    SELECT name, MAX(value) AS max_value 
    FROM yourTable 
    GROUP BY name 
), 
WITH cte2 AS (
    SELECT t.name, ROW_NUMBER() OVER (ORDER BY t.max_value DESC) rn 
    FROM cte1 t 
) 
SELECT t1.name, t1.value 
FROM yourTable t1 
INNER JOIN cte2 t2 
    ON t1.name = t2.name 
ORDER BY t2.rn, t1.value DESC 
+0

нет, ваш код не является верным результатом – Saber

+0

@Saber 'is not true result' ... что означает этот комментарий? Обновите свой вопрос, четко показывая нужные вам входные и выходные данные. Мой ответ соответствует диаграмме, которую вы нам показали. –

+0

в результате сначала: 'a', потому что максимальное значение и следующая запись все 'a' second: 'd', потому что второе максимальное значение и следующая запись все 'd' – Saber

0

Определенно странное требование, но ниже фрагмент кода должен делать свою работу -

declare @t table(name varchar(1), value int) 
insert into @t values('a',50),('b',11),('a',10),('d',33),('f',5),('b',3) 
select name,value from @t 
select name,value from @t order by case when name='a' then 1 when name='b' then 3 when name='d' then 2 when name='f' then 4 end,value desc