2011-03-12 94 views
0

需要幫助在邏輯數據更新我有3個表:使用存儲過程

  1. 帳戶(使用的字段:ID VARCHAR(20)和名稱爲varchar(50))

  2. OpttyPartner(字段使用:ID15 VARCHAR(20),ACCOUNTTOID VARCHAR(20)

  3. Final2([機會ID] VARCHAR(20),合夥VARCHAR(400)

我需要更新每個記錄的最終合作伙伴字段,以及來自會計科目表的名稱。 Final2涉及OpptyPartner含{機會ID]和ID15 帳戶與具有ID和ACCOUNTTOID OpptyPartner相關

如果存在多於一個的accounttoid爲同一機會ID則名稱應附加並用「分隔; 「

例如:

Final2 

ID  Partner 
1  


OpptyPartner 
ID15    ACCOUNTTOID 
    1     A1 
    1     A2 

Accounts 
    ID     Name 
    A1     ABC com 
    A2     EFG com 

在合作伙伴的輸出應該是 'ABC COM; EFG COM'

如何才能實現這一目標?遊標?

UPDATE:

;With partners as 
(select * from Accounts inner join OpptyPartner on 
Accounts.ID COLLATE Latin1_General_CS_AS=OpptyPartner.[ACCOUNTTOID] COLLATE Latin1_General_CS_AS 
inner join Final2 on Final2.[Opportunity ID] = OpptyPartner.ID15) 
Update Final2 set Partner = p.Names from 
Final2 inner join 
(select [Opportunity ID] , LEFT(Names, len(Names)-1) as Names from 
(SELECT j.[Opportunity ID] , 

    (SELECT cast(p1.NAME as varchar(10)) + ';' 

     FROM partners p1 

     WHERE p1.[Opportunity ID] = j.[Opportunity ID] 

     ORDER BY NAME 

     FOR XML PATH('')) AS Names 
    FROM partners j 
    GROUP BY [Opportunity ID])A 
) p on Final2.[Opportunity ID] = p.[Opportunity ID] 

回答

1

我認爲這可能是有用的:

;With partners as 
(select [Opportunity ID], Name from accounts inner join OpttyPartner on 
accounts.id=OpttyPartner.[ACCOUNTTOID] 
inner join final2 on final2.[Opportunity ID] = OpttyPartner.id15) 
Update final2 set partner = p.names from 
final2 inner join 
(select [Opportunity ID] , LEFT(Names, len(Names)-1) as Names from 
(SELECT j.[Opportunity ID] , 

     (SELECT cast(p1.Name as varchar(10)) + ';' 

      FROM partners p1 

      WHERE p1.[Opportunity ID] = j.[Opportunity ID] 

      ORDER BY Name 

      FOR XML PATH('')) AS Names 
     FROM partners j 
     GROUP BY [Opportunity ID])A 
) p on final2.[Opportunity ID] = p.[Opportunity ID] 

嘗試使用此(添加整理必要時),如果你有opptyPartner多條記錄與相同的ID15和ACCOUNTTOID:

;With partners as 
(select [Opportunity ID], Name from accounts inner join (select distinct [ID15] 
     ,[ACCOUNTTOID] from OpttyPartner) OpttyPartner on 
accounts.id=OpttyPartner.[ACCOUNTTOID] 
inner join final2 on final2.[Opportunity ID] = OpttyPartner.id15) 
Update final2 set partner = p.names from 
final2 inner join 
(select [Opportunity ID] , LEFT(Names, len(Names)-1) as Names from 
(SELECT j.[Opportunity ID] , 

     (SELECT cast(p1.Name as varchar(10)) + ';' 

      FROM partners p1 

      WHERE p1.[Opportunity ID] = j.[Opportunity ID] 

      ORDER BY Name 

      FOR XML PATH('')) AS Names 
     FROM partners j 
     GROUP BY [Opportunity ID])A 
) p on final2.[Opportunity ID] = p.[Opportunity ID] 
+0

'ID'列被指定爲多個次'合作伙伴'。我得到這個錯誤 – Prady 2011-03-12 05:04:29

+0

@Prady:在我的表格設計中看到的名爲唯一的「ID」列是在Accounts表上。我修改了我的答案,只選擇了幾列。 – 2011-03-12 05:09:23

+0

@Radu我已更新原來的問題與我正在使用的查詢..我不得不添加排序規則 – Prady 2011-03-12 05:26:34