#sql #sql-server #sql-server-2016
Вопрос:
V_ABC(его представление)
ID value interest Reference Code
1 5 Fixed 2
1 2 Variable 4
2 6 Variable 5
2 2 Fixed 1
3 4 Fixed 5
3 1 Variable 4
мне нужен этот вывод, пожалуйста.
ID value Interest Reference Code
1 7 Fixed 4
2 8 Variable 5
3 5 Fixed 5
У меня есть представление V_ABC. Я пытаюсь добавить ценность, что прекрасно, а также получить максимальный ссылочный код.
Кроме того, я пытаюсь получить тип интереса, основанный на максимальном значении, но пока не удалось. например, в поле зрения,
- Идентификатор 1 имеет максимальное значение 5 и нуждается в фиксированном проценте
- Идентификатор 2 максимальное значение 6 и проценты должны быть переменными
- Идентификатор 3 максимальное значение 4 и проценты должны быть фиксированы .
Я пытаюсь заинтересовать вас. Вот мой СЦЕНАРИЙ. Я использую SQL server 2016
Select id,sum(value),Max(ReferenceCode)
(
Select id,value,
first_value(Interest) over (Partition by value Order by value desc) as Interest,Referencecode From V_ABC
)dd
group by id
Ответ №1:
Вероятно, самый простой метод использует row_number()
и условную агрегацию:
select id, sum(value),
max(case when seqnum = 1 then interest end),
max(case when seqnum = 1 then reference_code end)
from (select t.*,
row_number() over (partition by id order by value desc) as seqnum
from t
) t
group by id;
Если вы хотите быть модным, вы можете использовать select distinct
с оконными функциями:
select distinct id,
sum(value) over (partition by id),
first_value(interest) over (partition by id order by value desc),
first_value(reference_code) over (partition by id order by value desc)
from t;