例如我在table1和table3下面。 '计数' table2中的字段应根据table1和table3中的valuess字段进行更新。即23表1和表3中出现4次,45出现一次。表2应该用该计数更新。
表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将从table1中获取。 004561和004561将从表3中获取并与表2的004561和adcwyx进行比较(我们需要首先剪掉table2中的第7个元素)然后进行比较。
最终结果应如表2所示。
答案 0 :(得分:1)
SUBSTRING
应该这样做。
WITH t13 AS (
SELECT Id, Data, SUBSTRING(Valuess,1,6) AS [Values]
FROM Table1
UNION ALL
SELECT Id, Data, SUBSTRING(Valuess,1,6) AS [Values]
FROM Table3
)
, cte AS (
SELECT [Values],COUNT(*) AS Count2
FROM t13 GROUP BY [Values]
)
UPDATE t2
SET t2.Counts = cte.Count2
FROM Table2 t2 JOIN cte ON SUBSTRING(t2.Fields,1,6) = cte.[Values];