【发布时间】:2016-12-07 21:37:31
【问题描述】:
例如我有下面的table1和table3。表 2 中的“计数”字段应根据表 1 和表 3 中的值字段进行更新。即 23 在 table1 和 table3 中出现 4 次,而 45 出现一次。 Table2 应该使用该计数进行更新。
表1
Id | Data | Valuess
1 | rfsd | 23
2 | fghf | 45
3 | rhhh | 23
表3
Id | Data | Valuess
1 | rfsd | 23
2 | tfgy | 23
表2
Id | Fields | Counts
1 | 23 | 4
2 | 45 | 1
我正在使用下面的存储过程来实现这一点。
WITH t13 AS (
SELECT Id, Data, Valuess FROM Table1 UNION ALL SELECT Id, Data, Valuess FROM Table3),
cte AS (SELECT Valuess,COUNT(*) AS Count2 FROM t13 GROUP BY Valuess)
UPDATE t2
SET t2.Counts = cte.Count2
FROM Table2 t2 JOIN cte ON t2.Fields = cte.Valuess;
问题
现在我有下表数据,而不是上表数据....
表1
Id | Data | Valuess
1 | rfsd | 004561
2 | fghf | 0045614
3 | rhhh | adcwyx
表3
Id | Data | Valuess
1 | rfsd | 0045614
2 | tfgy | 004561
表2
Id | Fields | Counts
1 | 0045614 | 4
2 | adcwyxv | 1
所以这里我们在 table1 和 table3 的 valuess 字段中有字母数字数据。我们还有像“004561”和“0045614”这样的数据
我想剪掉该字段的第 7 个元素,并将其与表 3 中的第 7 个元素剪掉进行比较。即 004561、004561 和 adcwyx 将从表 1 中获取。 004561 和 004561 将从 table3 中取出,并与 table2 的 004561 和 adcwyx 进行比较(我们需要先剪掉 table2 中的第 7 个元素),然后进行比较。
最终结果应如表2所示。
【问题讨论】:
-
SQL-Server != MySQL.
-
table1中的
adcwyx如何变成table2中的adcwyxv? -
sqlzim - 它是 2 个不同的数据值并且不相互依赖。
标签: sql-server sql-server-2008 stored-procedures