У меня есть малонаселенная матрица, которая является результатом серии левых объединений. Я хотел бы свернуть его в один ряд (см. Ниже). Единственное решение, которое я видел, это GROUP BY на ПК и MAX () на ColA, ColB и т. Д. Производительность - это огромная проблема, поэтому я хотел бы знать, есть ли у кого-нибудь лучшее решение. Столбцы ColA, ColB и т. Д. - это строки, которые были повернуты к столбцам. Насколько я понимаю, я не могу использовать PIVOT, потому что столбцы идут от строк (от 1 до n) и могут меняться в любой момент времени.
Join, который производит SPM (нет, мои таблицы / столбцы на самом деле не названы так):
SELECT
mainTable.custNbr
, mainTable.custPartNbr
, [lkup colA].usr_def_attr as [colA]
, [lkup colB].usr_def_attr as [colB]
, [lkup colC].usr_def_attr as [colC]
, [lkup colD].usr_def_attr as [colD]
, [lkup colE].usr_def_attr as [colE]
FROM db2.dbo.table2 as mainTable
LEFT JOIN db1.dbo.lookup as [colA]
ON mainTable.lookupValue = [colA].lkup_id
and mainTable.cmply_typ_lkup_id = 166697
LEFT JOIN db1.dbo.lookup as [lkup colB]
ON mainTable.lookupValue = [lkup colB].lkup_id
and mainTable.cmply_typ_lkup_id = 166700
LEFT JOIN db1.dbo.lookup as [lkup colC]
ON mainTable.lookupValue = [lkup colC].lkup_id
and mainTable.cmply_typ_lkup_id = 166699
LEFT JOIN db1.dbo.lookup as [lkup colD]
ON mainTable.lookupValue = [lkup colD].lkup_id
and mainTable.cmply_typ_lkup_id = 166696
LEFT JOIN db1.dbo.lookup as [lkup colE]
ON mainTable.lookupValue = [lkup colE].lkup_id
and mainTable.cmply_typ_lkup_id = 166698
Результат:
PKCol ColA ColB ColC ColD ColE
204045 NULL NULL NULL NULL 23
204045 NULL NULL NULL 35 NULL
204045 NULL NULL 35 NULL NULL
204045 NULL 23 NULL NULL NULL
204045 23 NULL NULL NULL NULL
Желаемый результат:
PKCol ColA ColB ColC ColD ColE
20405 23 23 35 35 23