2011-03-04 4 views
0

У меня есть 3 таблицыобновление SQL запросов с использованием 3 таблицы

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

Таблица B

Opp ID   Partner Account ID 
    O11    1 
    O11    2 

Таблица C

Opp Id   Pstring 
    O11 
    O12 

Я хочу обновить таблицу C PString с именем учетной записи, если там 2 идентификатора учетной записи для того же oppID, то они должны быть добавлены с точкой с запятой между ними и обновлены в Pstring

Например

  • Для Опп Id O11, PString должен иметь Account1;Account2

Как я могу добиться этого? Любой указатель будет очень полезен.

ответ

2

Образцы таблиц

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' 

Создать функцию Concat имен учетных записей для OppID (одноразовое создание)

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 

Обновление запроса

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

работал как шарм – Prady

1

попробовать что-то вроде этого:

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 

Смотрите также this question для более detials.

+0

Я использую Sql 2005 и я получаю сообщение об ошибке «Неправильный синтаксис рядом с« МАКС ».» – Prady

+0

change MAX to 1000 –

+0

Неверный синтаксис рядом с 'XML'. теперь я получу его здесь – Prady

Смежные вопросы