2016-07-19 8 views
2

У меня есть таблица с людьми, их расходы и некоторые другие столбцы. Мне нужно создать два новых столбца: rank1 и rank2. Эти рейтинги «вычисляются», используя некоторые столбцы и используя агрегаты.TSQL: ранжирование записей с использованием разных столбцов

ranking1: if total of person expenses exceeds 1000 then ranking 1 else ranking 0 
ranking2: (if Col1 = 1 then 0 else 5) + (if Col2 = 1 then 0 else 7) + (if Col3 = 1 then 5 else 10) 

Что мне нужно, чтобы иметь оригинальную таблицу (неизмененный) с этими двумя новыми столбцами, которые дают мне рейтинг для каждого человека.

Мой запрос:

select Col1, Col2, Col3 
     ((CASE Col1 = 1 THEN 0 ELSE 5 END) + 
     (CASE WHEN Col2 = 1 THEN 0 ELSE 7 END) + 
     (CASE WHEN Col3 = 1 THEN 5 WHEN Col3 = 2 THEN 2 ELSE 10 END)) as ranking, tmp.Expenses from table t 
left join (select id, Person, 
      (case when temp.expenses > 1000 then 1 else 0 end) as UserExpenses 
      from (select id, Person, sum(Expenses) as expenses 
      from table 
      group by id, Person) temp) tmp 
on t.Person = tmp.Person and t.id = tmp.id 
order by ranking desc, tmp.UserExpenses desc 

Я сомнителен о том, если этот запрос будет дать мне то, что я хочу, чтобы это оригинальный неизмененном стол с двумя новыми столбцами, как рейтинг. Особенно я сомневаюсь в том, что присоединился левый, правильно ли это присоединиться? Заранее спасибо

ответ

0

Ваш запрос должен принести вам правильные результаты. Ниже представлена ​​небольшая упрощенная версия вашего запроса:

select Col1, 
     Col2, 
     Col3 
     (CASE WHEN Col1 = 1 THEN 0 ELSE 5 END) + 
     (CASE WHEN Col2 = 1 THEN 0 ELSE 7 END) + 
     (CASE WHEN Col3 = 1 THEN 5 WHEN Col3 = 2 THEN 2 ELSE 10 END) as ranking, 
     (case when temp.expenses > 1000 then 1 else 0 end) as Expenses  
from [table] t 
OUTER APPLY (select id, 
        Person, 
        sum(Expenses) as expenses 
      from [table] 
      where t.Person = Person and t.id = id 
      group by id, Person 
      ) temp 
order by ranking desc, temp.expenses desc 
+0

Спасибо за ответ и предложения! – bpesunny

+0

Мое удовольствие! Отлично, если это помогает! – gofr1

Смежные вопросы