2011-03-04 3 views
0

J'ai 3 tablesmise à jour de requête SQL en utilisant 3 tables

Table A 
Account Id   Account Name 
1     Account1 
2     Account2 
3     Account3 

Tableau B

Opp ID   Partner Account ID 
    O11    1 
    O11    2 

Tableau C

Opp Id   Pstring 
    O11 
    O12 

Je veux mettre à jour le tableau C PString avec le nom du compte, si il y a 2 identifiants de compte pour le même oppID puis ils doivent être ajoutés avec un point-virgule entre eux et mis à jour dans Pstring

Par exemple

  • Pour Opp Id O11, PString devrait avoir Account1;Account2

Comment puis-je y parvenir? Tout pointeur serait d'une grande aide.

Répondre

2

tables exemples

create table A (AccountId int, AccountName varchar(100)) 
insert A select 1 ,'Account1' 
insert A select 2 ,'Account2' 
insert A select 3 ,'Account3' 
create table B (OppID varchar(10), PartnerAccountID int) 
insert B select 'O11', 1 
insert B select 'O11', 2 
create table C (OppId varchar(10), Pstring varchar(1000)) 
insert C (OppId) select 'O11' 
insert C (OppId) select 'O12' 

Créer une fonction pour concaténer les noms de compte pour un OppID (unique création)

create function dbo.concatAccountName(@OppId varchar(10)) returns varchar(8000) 
as 
begin 
declare @tmp varchar(8000) 
select @tmp = isnull(@tmp+';','') + A.AccountName 
from A 
inner join B on A.AccountID = B.PartnerAccountID 
where [email protected] and A.AccountName is not null 
return @tmp 
end 
GO 

La requête de mise à jour

update C 
set PString = dbo.concatAccountName(OppID) 
+0

a travaillé comme charme – Prady

1

Essayez quelque chose comme ceci:

UPDATE C 
SET PString = X.PString 
FROM 
(
    SELECT OppID, 
     (SELECT CAST(AccountName + ';' AS VARCHAR(MAX)) 
     FROM A 
     WHERE (A.AccountID = B.PartnerAccountID) 
     FOR XML PATH ('') 
    ) AS PString 
    FROM B 
) X 
WHERE X.OppID = C.OppID 

Voir aussi this question pour plus detials.

+0

J'utilise Sql 2005 et j'obtiens une erreur "Syntaxe incorrecte près de 'MAX'." – Prady

+0

change MAX à 1000 –

+0

Syntaxe incorrecte près de 'XML'. maintenant je l'obtiens ici – Prady