【问题标题】:SQL Server stored procedure to count matching records in two tables and insert number into another tableSQL Server存储过程计算两个表中的匹配记录并将数字插入另一个表
【发布时间】:2019-11-22 16:55:41
【问题描述】:

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

例如下面的场景

表 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. 找到的唯一列的总数

然后在TableC 中插入上述条件。所以结果如下。由于 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

不胜感激。

【问题讨论】:

  • 样本数据和期望的结果会有所帮助。

标签: sql sql-server


【解决方案1】:
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 和匹配计数来工作,这很简单。但随后我们将其用作相关子查询来加入更新语句。

【讨论】:

  • 我用我想要实现的不同设计编辑了我的问题
【解决方案2】:

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

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

完成此操作后,您可以将该变量用作同一存储过程中插入语句的一部分。

最终,我认为它会是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多