【发布时间】:2021-04-11 10:57:36
【问题描述】:
具有 Column1 和 Column2 的数据库表。获取值并映射列(Column1 和 Column2)详细信息并在 Column3
中更新Column3 应该具有 Column1 值,其中 Column1 值等于 Column2 值。请参考附图以获得更好的理解。
示例 1:Column1 包含 914702(Row#2),Column2(Row#1)中的值相同。所以第 2 行的 Column3 应该更新第 1 行中 Column1 的值,即 914703
示例 2:Column1 包含 914698(Row#5),Column2(Row#3 & 4)中的值相同。因此,第 5 行中的第 3 列应该保存第 3 行和第 4 行中第 1 列的值,即 914700、914701。
可以通过下面提到的查询和 WHILE 循环来实现这一点。
具有 100 行的表。使用 while 循环会影响性能。我们能否在 SQL Server 中使用 UPDATE 语句来实现这一点。
DECLARE @Variable VARCHAR(MAX) = ''
SELECT @Variable = @Variable + 'Value: ' + CONVERT(VARCHAR, Column1) + ', '
FROM Table1 WHERE Column2 = @Value
UPDATE Table1
SET Column3 = SUBSTRING(@Variable, 0, LEN(@Variable) - 1)
WHERE Column1 = @Value
预期输出
【问题讨论】:
-
这是可能的,但看起来您确实需要对表格进行更多规范化。查找第三范式
-
请阅读this,了解一些改进问题的技巧。然后查看
String_Agg。然后更新 SQL Server。
标签: sql-server tsql sql-server-2012 ssms ssms-2012