sql - 如何在 SQL Server 上计算以 2 列作为参数的表中的值的数量?

标签 sql sql-server count

我有2个表,其中的值如下:

表A:

|     Date     |     Time     |     Count     |
===============================================
|      D1      |      T1      |       0       |
|      D1      |      T2      |       0       |
|      D2      |      T1      |       0       |
|      D2      |      T2      |       0       |

表B:

|     Date     |     Time     |     Value     |
===============================================
|      D1      |      T1      |       a       |
|      D1      |      T1      |       b       |
|      D1      |      T1      |       c       |
|      D1      |      T2      |       e       |
|      D2      |      T1      |       f       |
|      D2      |      T1      |       g       |
|      D2      |      T1      |       h       |
|      D2      |      T2      |       i       |
|      D2      |      T2      |       j       |

我正在尝试创建一个查询,该查询可以计算 Table B 中的 Value 数量,并将结果插入到 Count 列中表 A

结果应显示的位置(在表 A 上):

|     Date     |     Time     |     Count     |
===============================================
|      D1      |      T1      |       3       |
|      D1      |      T2      |       1       |
|      D2      |      T1      |       3       |
|      D2      |      T2      |       2       |

我尝试使用正常的更新与代码:

UPDATE A
SET Count = (SELECT COUNT(Value)
             FROM B, A
             WHERE A.Date = B.Date
                   and A.Time = B.Time)

However, it resulted in all Count becoming 9 instead of showing each Date and Time set its value

我无法为每个日期和时间数据创建 ID,因为“日期和时间”列的值每小时都会更改

我的代码有问题吗?或者有其他方法可以解决这个问题吗?

预先感谢您提供的任何帮助

最佳答案

SQL 的主要问题是它不区分行 - 它只是将所有行更新为单个计算值。您需要将要更新的表连接回源 - 在本例中是 tableB 的分组版本。

这样就可以了

UPDATE tableA 
SET Count = b.Count
FROM tableA a
INNER JOIN
(
    SELECT Date, Time, COUNT(value) as Count
    FROM tableB
    GROUP BY Date,Time
) b
ON a.Date = b.Date AND a.Time=b.Time

现场演示:http://sqlfiddle.com/#!18/7264f/2

关于sql - 如何在 SQL Server 上计算以 2 列作为参数的表中的值的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49486015/

相关文章:

带有 LIKE '%?%' 的 SQL 准备语句

mysql - 在 SQL 中过滤选定的列

sql-server - 批量插入会阻止 nolock 查询

sql-server - SQL Server 中 IsSchemaBound View 的设置有什么用?

mysql - 对于 mysql 中的特定字段,返回表中计数 > 1 的所有记录

获取所有行直到 SUM(列)大于 X 的 MySQL 查询

sql - 如何批量插入数据到两个SQL表

java - "com.microsoft.sqlserver.jdbc.SQLServerDriver"的 ClassNotFoundException

mysql - 在子查询中加入

sql - Postgres 左连接和计数