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

如何计算SQL Server上以2列作为参数的表中的值数?,sql,sql-server,count,Sql,Sql Server,Count,我有两个表,其中值如下: 表A: | Date | Time | Count | =============================================== | D1 | T1 | 0 | | D1 | T2 | 0 | | D2 | T1 | 0

我有两个表,其中值如下:

表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       |
我正在尝试创建一个查询,该查询可以从
表B
中计算
值的数量,并将结果插入
表a的
列中

结果应显示在哪里(在表A上):

我尝试使用普通更新代码:

UPDATE A
SET Count = (SELECT COUNT(Value)
             FROM B, A
             WHERE A.Date = B.Date
                   and A.Time = B.Time)
但是,它导致所有计数变为9,而不是显示每个日期和时间设置的值

我无法为每个日期和时间数据创建ID,因为列Date和Time的值将每小时更改一次

我的代码是否有问题,或者是否有其他方法来解决这个问题


提前感谢您提供的任何帮助

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

现场演示:

您可以使用
加入
。但是,第二个表应该将计数
[Value]
作为子查询

查询

update t1
set [t1].[Count] = [t2].[Count]
from [TableA] as [t1]
join (
    select [Date], [Time], count([Value]) as [Count]
    from [TableB]
    group by [Date], [Time]
) as [t2]
on [t1].[Date] = [t2].[Date]
and [t1].[Time] = [t2].[Time];

您正在使用的查询:

UPDATE A
SET Count = (SELECT COUNT(Value)
             FROM B, A --<-- A being used here overrides `A` of `UPDATE`
             WHERE A.Date = B.Date
                   and A.Time = B.Time)
在此查询中,根据以下条件,正在更新的行与
B
中的所有行之间存在相关性:

A.Date = B.Date and A.Time = B.Time
因此,子查询返回的值取决于正在更新的每一行的
Date
Time
字段


发布的查询应该可以正常工作。这与您针对实际数据使用的查询完全相同吗?不完全相同,我正在减少未使用列的数量,因为我的实际数据非常庞大。但是,我的结构完全相同。我也试着加入Group By,但似乎什么也没有改变@Giorgosbetosit似乎我的评论是正确的。请检查我的答案。第二行的b.Count是指b.列的值还是应该是Count?@ErickVanhite此答案中的代码经过测试和演示(给出您的预期结果)。
b.Count
指的是下方的别名表
b
,它本身就是从您的
TableB
中执行
Count(Value)
的结果。啊,对了,很抱歉,由于所有别名,我花了一段时间才理解,非常感谢您,它现在起作用了
UPDATE A
SET Count = (SELECT COUNT(Value)
             FROM B
             WHERE A.Date = B.Date
                   and A.Time = B.Time)
A.Date = B.Date and A.Time = B.Time