2011-03-12 3 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에 대한 모든 레코드의 파트너 필드를 업데이트해야합니다. Final2는 계정이 ID와 ACCOUNTTOID와 OpptyPartner 관련된다 {기회 ID]와 ID15 으로 OpptyPartner 관련된

동일한 기회 ID에 대한 하나 이상의 accounttoid 그때 이름이 첨부 된 특허 및 '를 구분해야하는 경우; ' 예를 들어

:

Final2 

ID  Partner 
1  


OpptyPartner 
ID15    ACCOUNTTOID 
    1     A1 
    1     A2 

Accounts 
    ID     Name 
    A1     ABC com 
    A2     EFG com 

파트너의 출력은 'ABC 닷컴, EFG 닷컴'해야

어떻게 달성 할 수 있는가? 커서?

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] 

이 같은 ID15와 opptyPartner에서 여러 레코드가있는 경우이가 (정렬 필요한 경우 추가)를 사용하여 시도 계좌 번호 :

;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

+0

@Prady : 테이블 디자인에서 볼 수있는 유일한 "ID"열은 계정 테이블에 있습니다. 내 대답을 수정하여 두 개의 열만 선택했습니다. –

+0

@Radu 내가 사용중인 쿼리로 원래 질문을 업데이트했습니다. 데이터 정렬을 추가해야했습니다. – Prady