繁体   English   中英

SQL 服务器存储过程统计两个表中的匹配记录并将数字插入另一个表

[英]SQL Server stored procedure to count matching records in two tables and insert number into another table

我有两个表,我可以通过连接找到匹配的记录。 但是,我想找到唯一列的计数以及找到的列的唯一总和,然后将该 integer 值插入另一个表列中,该列存储找到的匹配记录的计数。

例如下面的场景

表 A

ID  ColumnA  ColumnB
------------------------
1    John      Toyota
2    John      Nissan
3    John      Mercedez
4    Mary      Infiniti
5    Mary      BMW

表B

ID ColumnA    ColumnB      ColumnC      ColumnD    ColumnE
-----------------------------------------------------------
1  John        Manager     Nissan        Toyota    Mercedez
2  Mary        CEO         BMW           Infiniti  Jaguar

所以在这个场景中,我们基于ColumnA连接表A和B。

SELECT a.ColumnA, a.ColumnB, b.ColumnA 
FROM TableA a
JOIN TableB b ON a.ColumnB = b.ColumnA;

如上所示,在 TableA 和 TableB 中查找匹配记录的连接很容易,但是我在提出存储过程来查找匹配记录的数量以及唯一列时遇到了问题。

我期望做的最终结果是一个存储过程来存储

  1. 找到的唯一列
  2. 找到的唯一列的总数

然后在表C中插入上述条件。 所以结果如下。 因为 John 出现在 TableA 和 TableB 中,我们将返回找到的唯一数据,所以在这种情况下,它将是 Toyota、Nissan 和 Mercedez - 总共 3 个。

表C

ID ColumnA    ColumnB      ColumnC      ColumnD    ColumnE
-----------------------------------------------------------
1  John        Toyota      Nissan       Mercedez    3
2  Mary        Infiniti    BMW                      2

将不胜感激一些指针/帮助。

CREATE PROCEDURE [dbo].[_UpdateColCByMatch]
AS
BEGIN
    UPDATE y SET y.ColumnC=x.MatchCount 
    FROM tableB y 
    INNER JOIN 
        (
            SELECT COUNT(a.ColumnA) AS MatchCount, ColumnA
            FROM TableA a
            JOIN TableB b ON a.ColumnA = b.ColumnA
            GROUP BY ColumnA
        ) x ON y.ColumnA=x.ColumnA;
END
GO

这个答案假设您希望根据 ColumnA 的匹配数更新 ColumnC。

它通过获取 ColumnA 和匹配计数来工作,这很简单。 但随后我们将其用作相关子查询来加入更新语句。

UPDATE TableB SET ColumnC = (SELECT COUNT(*) FROM TableA WHERE ColumnA = TableB.ColumnA)

小提琴。

虽然我不是 SQL 服务器方面的专家,但我认为以下解决方案对您有用。

在您的存储过程中,您将需要查询计数,然后将该值分配给一个变量。

一旦你这样做了,你就可以在同一个存储过程中使用该变量作为插入语句的一部分。

最终,我认为它看起来像这样:

CREATE PROCEDURE InsertCountProc()
AS
BEGIN
SET NOCOUNT ON

SELECT COUNT(*) INTO @newVariable
FROM TableA a
INNER JOIN TableB b
ON a.ColumnA = b.ColumnA;

INSERT INTO COUNT_TABLE (COUNT_COLUMN)
VALUES (@newVariable);

END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM