У меня есть таблица с людьми, их расходы и некоторые другие столбцы. Мне нужно создать два новых столбца: 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
Я сомнителен о том, если этот запрос будет дать мне то, что я хочу, чтобы это оригинальный неизмененном стол с двумя новыми столбцами, как рейтинг. Особенно я сомневаюсь в том, что присоединился левый, правильно ли это присоединиться? Заранее спасибо
Спасибо за ответ и предложения! – bpesunny
Мое удовольствие! Отлично, если это помогает! – gofr1