SP使用前2个表

时间:2016-12-07 21:37:32

标签: sql-server sql-server-2008 stored-procedures

例如我在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所示。

1 个答案:

答案 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];