Sql 基于两个具有RowID的表更新表是通用的
我有一张这样的桌子:Sql 基于两个具有RowID的表更新表是通用的,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我有一张这样的桌子: RowID; ListDescription1; ListNormalisedDescription1; 1 XXXX YYYY NULL 2 ZZZZZ NULL 我进行了复杂的转换/规范化(删除空格、替换空格和拆分),并设法将相同的数据转换为: RowID; NormalisedItemDescrption1; 1 XXXX 1 YYYY 2 ZZZZZ 正如您所看到的,这两个
RowID; ListDescription1; ListNormalisedDescription1;
1 XXXX YYYY NULL
2 ZZZZZ NULL
我进行了复杂的转换/规范化(删除空格、替换空格和拆分),并设法将相同的数据转换为:
RowID; NormalisedItemDescrption1;
1 XXXX
1 YYYY
2 ZZZZZ
正如您所看到的,这两个表之间的共同点是RowID
我想根据表更新ListNormalisedDescription1,以便:
RowID; ListDescription1; ListNormalisedDescription1;
1 XXXX YYYY XXXX;YYYY
2 ZZZZZ ZZZZZ
请注意分隔符在“;”中
如果可能的话,我会尽量避开光标
谢谢假设使用SQL Server 2005+,请使用:
UPDATE table
SET ListDescription1 = STUFF(ISNULL(SELECT ' ' + x.NormalisedItemDescrption1
FROM NORMALIZED_TABLE x
WHERE x.rowid = rowid
GROUP BY x.NormalisedItemDescrption1
FOR XML PATH ('')), ''), 1, 2, ''),
ListNormalisedDescription1 = STUFF(ISNULL(SELECT ';' + x.NormalisedItemDescrption1
FROM NORMALIZED_TABLE x
WHERE x.rowid = rowid
GROUP BY x.NormalisedItemDescrption1
FOR XML PATH ('')), ''), 1, 2, '')
我正在使用您的方法,通过一些修改使用STUFF和XML路径。谢谢。但是如果您随后将
ListNormalisedDescription1
值转换回分号分隔的字符串,那么它将不再规范化…?@OneDayWhen:我们对此使用了错误的术语“规范化”。)