【发布时间】:2009-01-21 17:52:17
【问题描述】:
我有一个稀疏矩阵,它是一系列左连接的结果。我想把它折叠成一行(见下文)。我看到的唯一解决方案是 PK 上的 GROUP BY 和 ColA、ColB 等上的 MAX() 。性能在这里是一个大问题,所以我想知道是否有人有更好的解决方案。 ColA、ColB 等列是已转为列的行。我的理解是我不能使用 PIVOT,因为列来自行(1 到 n)并且可能在任何给定时间发生变化。
产生 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
【问题讨论】:
-
让我澄清一件事:“起点”已经是一个表,而不仅仅是您当前查询的结果集? (即,我们不能影响“起点”的生成方式?)
标签: sql sql-server