我有一個稀疏填充的矩陣,它是一系列左連接的結果。我想將它摺疊成一行(見下文)。我見過的唯一解決方案是PK上的GROUP BY和ColA上的MAX(),ColB等。性能是一個很大的問題,所以我想知道是否有人有更好的解決方案。列ColA,ColB等是已經被旋轉到列的行。我的理解是,我不能使用PIVOT,因爲列來自行(1到n),並且可能在任何給定時間改變。摺疊人口稀疏的矩陣的最佳方式
加入產生的SPM(不,我的表/ COLS是不是真的命名的):
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
讓我澄清一件事:「開始點」已經是一個表格,而不僅僅是您當前查詢的結果集合? (即,我們不會影響如何生成「起始點」?) – Reunanen 2009-01-21 18:17:45
Pukku:更新了OP。 – jcollum 2009-01-23 01:47:12