Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于两个具有RowID的表更新表是通用的_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

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:我们对此使用了错误的术语“规范化”。)