嵌套SQL与更新语句的合并数据部分

时间:2015-06-17 15:21:02

标签: sql-server join sql-update concat coalesce

我有以下设置

create table #work
(
customer_no int,
attended_conf varchar(100) -- ADDED LR 6/16/15
)

#work表被填充 - customer_no被填充,attend_conf为空,直到更新的语句。

我想要做的是使用连接字符串更新attended_conf字段。 (代码应该获取给定keyword_no的所有key_values并连接它们。这段代码有效:

declare @const_str varchar(255)
select @const_str = ''


SELECT  @const_str = @const_str + COALESCE(e.key_value + '; ', '') 
from    TX_CUST_KEYWORD e 
join    T_CUSTOMER s on e.customer_no=s.customer_no
where   e.customer_no = 86038213 
and     keyword_no = 704

select @const_str

一行的输出看起来像这样:

(No column name)
2003-2004; 2007-2008; 2014-2015; 2017-2018; 

但是,当我尝试使用update语句进行整合时。 我的初始更新声明(需要更改)。

update  x       
set     attended_conference = @const_str 
from    #work x
join    TX_CUST_KEYWORD p on x.customer_no = p.customer_no
where   keyword_no = 704

做这样的事......

update  x       
set     attended_conference = @const_str 
from    #work x
join    (select @const_str = @const_str + COALESCE(e.key_value + '; ', ''), 
                    s.customer_no
            from    TX_CUST_KEYWORD e 
                    join    T_CUSTOMER s on e.customer_no=s.customer_no
                    where       keyword_no = 704) as a
where   x.customer_no = a.customer_no  

不起作用。

我的问题与其他问题不同,因为我需要在更新语句中进行COALESCE / concatenate而不是简单的选择。我不能做一个选择。其他票证似乎显示一个选择语句,我可以选择确定 - 但我的问题是更新。

1 个答案:

答案 0 :(得分:0)

您可以使用FOR XML连接




 更新x
设置attend_conf =(选择e.key_value +';'as“text( )“
来自TX_CUST_KEYWORD e
其中e.customer_no = x.customer_no
和e.keyword_no = 704
按e.key_value排序
用于xml路径(''))&# xA;来自#work x