我有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,如果同一个oppID有2个帐号ID,那么它们之间应附加分号并在Pstring中更新
例如
Account1;Account2
我怎样才能做到这一点?任何指针都会有很大的帮助。
答案 0 :(得分: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'
创建一个函数来连接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 B.OppID=@OppId and A.AccountName is not null
return @tmp
end
GO
更新查询
update C
set PString = dbo.concatAccountName(OppID)
答案 1 :(得分: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。