开发者

Need help in logic for data update using stored procedure

开发者 https://www.devze.com 2023-02-16 21:05 出处:网络
I have 3 tables: Accounts (fields used: ID varchar(20) and Name varchar(50)) OpttyPartner( fields used : ID15 varchar(20) , ACCOUNTTOID varchar(20)

I have 3 tables:

  1. Accounts (fields used: ID varchar(20) and Name varchar(50))

  2. OpttyPartner( fields used : ID15 varchar(20) , ACCOUNTTOID varchar(20)

  3. Final2([Opportunity ID] varchar(20), Partner varchar(400)

I need to update Partner field of every record for final2 with name from accounts table. Final2 is related to OpptyPartner with {opportunity ID] and ID15 Accounts is related with OpptyPartner with ID and ACCOUNTTOID

If there are more than one accounttoid for same Opportunity ID then the names should be appended and seperated with a ';'

For example:

 Final2

 ID       Partner
 1       


 OpptyPartner
 ID15                ACCOUNTTOID
  1                   A1
  1                   A2

 Accounts
  ID                 Name
   A1                 ABC com
   A2                 EFG com

The output in Partner should be 'ABC com;EFG com'

How can this be achieved? Cursors ?

UPDATE:

    ;With partners as
(select * from Accounts inner 开发者_JAVA技巧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]


I think this might be of use:

    ;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]

Try using this (add collation where necessary) if you have multiple records in opptyPartner with same ID15 and 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

精彩评论

暂无评论...
验证码 换一张
取 消