Я пытаюсь получить набор результатов, который содержит строки данных с GUID, значением Percentage, именем и битовым флагом, а также сводит эти данные таким образом, чтобы они группировались по GUID и имели набор столбцов дляостальные поля. Каждый GUID может иметь до пяти строк данных в исходном наборе результатов, но может не иметь ни одного или числа от одного до пяти.
Требуемый результат должен выглядеть следующим образом в терминах столбцов:
GUID, Name1, Perc1, Flag1, Name2, Perc2, Flag2, Name3, Perc3, Flag3, Name4, Perc4, Flag4, Name5, Perc5, Flag5
Мне удалось PIVOT данных, чтобы яможно получить имена, отображаемые на фоне идентификатора GUID, но я не уверен, как его расширить, чтобы получить другие поля (Perc и флаг) для каждого имени в наборе результатов.
SELECT Id, Insurer1, Insurer2, Insurer3, Insurer4, Isurer5
FROM (
SELECT Policy.Id,
BinderInsurer.[Percentage] As BinderInsurerPerc,
BinderInsurer.LeadInsurer,
Account.RegisteredCompanyName As BinderInsurerName,
ROW_NUMBER() OVER (PARTITION BY Policy.Id ORDER BY BinderInsurer.[Percentage] DESC) AS PolCount,
'Insurer' + CONVERT(VARCHAR(6), ROW_NUMBER() OVER (PARTITION BY Policy.Id ORDER BY BinderInsurer.[Percentage] DESC)) AS PivotKey
FROM [Policy]
Left Join Scheme On Scheme.Id = [Policy].SchemeId
Left Join BinderAgreement On BinderAgreement.Id = Scheme.BinderAgreementId
Left Join BinderSection On BinderSection.Id = Scheme.BinderSectionId
Left Join BinderPeriod On BinderPeriod.Id = Scheme.BinderPeriodId
Left Join BinderInsurer On BinderAgreement.Id = BinderInsurer.BinderAgreementId
Left Join Account On Account.Id = BinderInsurer.AccountId
) a
PIVOT
(
MAX(a.BinderInsurerName)
FOR PivotKey IN ([Insurer1], [Insurer2], [Insurer3], [Insurer4],
[Isurer5])
) AS pvt
Iожидаем, что выводом будет таблица с единственной строкой для каждого GUID с оставшимися столбцами, заполненными, где это необходимо, на основе ввода.