【问题标题】:SP to update 3rd table using data in first 2 tablesSP 使用前 2 个表中的数据更新第 3 个表
【发布时间】: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


【解决方案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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多