Я работаю с SQL Server в течение большей части десятилетия, и эта группировка (или разбиение на разделы или ранжирование ... Я не уверен, что такое ответ!), я смущен. Чувствуется, что это тоже должно быть легко. Я обобщу свою проблему:SQL Server: вопрос Grouping, который меня раздражает
Предположим, у меня 3 сотрудника (не беспокойтесь о том, чтобы они ушли или что-то еще ... всегда есть 3), и я не отстаю от того, как я распределяю их зарплаты ежемесячно.
Month Employee PercentOfTotal
--------------------------------
1 Alice 25%
1 Barbara 65%
1 Claire 10%
2 Alice 25%
2 Barbara 50%
2 Claire 25%
3 Alice 25%
3 Barbara 65%
3 Claire 10%
Как вы можете видеть, я заплатил им такое же процент в месяцах 1 и 3, но в месяце 2, я дал Алисе те же 25%, но Барбара получила 50% и Клэр получила 25 %.
Что я хочу знать, это все отличные распределения, которые я когда-либо давал. В этом случае было бы два - один в течение месяцев 1 и 3 и один за месяц 2.
Я ожидаю, что результаты будут выглядеть примерно так (ПРИМЕЧАНИЕ: идентификатор или секвенсор или что-то еще не имеет значения)
ID Employee PercentOfTotal
--------------------------------
X Alice 25%
X Barbara 65%
X Claire 10%
Y Alice 25%
Y Barbara 50%
Y Claire 25%
Кажется, легко, правильно? Я в тупике! У кого-то есть элегантное решение? Я просто собрал это решение при написании этого вопроса, который, похоже, работает, но мне интересно, есть ли лучший способ. Или, может быть, другой способ, из которого я кое-что узнаю.
WITH temp_ids (Month)
AS
(
SELECT DISTINCT MIN(Month)
FROM employees_paid
GROUP BY PercentOfTotal
)
SELECT EMP.Month, EMP.Employee, EMP.PercentOfTotal
FROM employees_paid EMP
JOIN temp_ids IDS ON EMP.Month = IDS.Month
GROUP BY EMP.Month, EMP.Employee, EMP.PercentOfTotal
Thanks y'all! -Ricky
Эй, спасибо - элегантный, работает в общем смысле и отличное объяснение. Производительность для меня не так важна, как одноразовый скрипт преобразования данных, а не код производственного уровня. – user366729