Одна из главных причин, по которой вы здесь боретесь, заключается в том, что вы, по-видимому, нарушили 1NF, вставив несколько значений в столбец ReferenceID. Это означает, что вы должны перепрыгнуть через кучу препятствий, чтобы распутать это. Если я понимаю, что вы ищете, это должно сработать.
Обратите внимание, как я создал некоторые образцы данных в формате расходных материалов? Вот как вы должны представить данные в будущем. Это позволяет другим легко работать над вашей проблемой. : D
declare @Something table
(
ReferenceID varchar(25)
, Numerator int
, Denominator int
, CycleValue int
, ActionPlan char(1)
)
insert @Something values
('CLM-12-FLC-MMA', 90, 100, 90, 'A')
, ('CLM-12-FLC-LTC', 80, 100, 80, 'B')
, ('CLM-13-FLC-MMA', 120, 200, 60, 'A')
, ('CLM-13-FLC-LTC', 200, 200, 100, 'B')
, ('CLM-16-FLC-MMA', 25, 50, 50, 'A')
, ('CLM-16-FLC-LTC', 50, 50, 100, 'B')
select GroupedRefID = x.NewRefID
, s.ReferenceID
, s.Numerator
, s.Denominator
, convert(varchar(10), s.CycleValue) + '%'
, GroupedNumerator = x.NumeratorTotal
, GroupedDenominator = x.DenominatorTotal
, GroupedCycleValue = convert(varchar(10), convert(int, 100 * (x.NumeratorTotal / (x.DenominatorTotal * 1.0) /*need to multiple by 1.0 so this becomes a decimal*/))) + '%'
, s.ActionPlan
from @Something s
cross apply
(
select NewRefID = left(s2.ReferenceID, LEN(s2.ReferenceID) - charindex('-', reverse(s2.ReferenceID)))
, NumeratorTotal = sum(s2.Numerator)
, DenominatorTotal = sum(s2.Denominator)
from @Something s2
where left(s2.ReferenceID, LEN(s2.ReferenceID) - charindex('-', reverse(s2.ReferenceID))) = left(s.ReferenceID, LEN(s.ReferenceID) - charindex('-', reverse(s.ReferenceID)))
group by left(s2.ReferenceID, LEN(s2.ReferenceID) - charindex('-', reverse(s2.ReferenceID)))
) x