如何根据另一个表中的值计数在一个表中设置值

时间:2019-10-17 07:18:35

标签: sql ms-access

我正在使用的数据库(与表1有关系)

The Database i am using Sample Data for Table1

我想根据Table1.Attendance中的“ P”字符个数来设置“帐户中的当前计数”(现在,它是手动设置的)。我尝试过进行如下所示的“计数”查询

UPDATE Accounts SET [Present Count] = (SELECT Count(*) FROM Table1 WHERE Table1.Attendance = 'P')
WHERE Accounts.Username = Table1.Username

我也尝试过

SELECT Count(Table1.Attendance) AS PCount HAVING ((Count(Table1.Attendance))='P'), Count(Table1.Attendance) AS ACount HAVING (Count(Table1.Attendance))='A'
FROM Table1
GROUP BY Username

但是这行不通,没有错误,没有更新或其他任何内容 也这样:

UPDATE Accounts
SET [Present Count] = (SELECT Count(*)
                       FROM Table1
                       WHERE Table1.Attendance = 'P' AND
                             Accounts.Username = Table1.Username
                      );

这将显示我在表格中手动设置的计数,而不是根据“ P”总数计算出的计数

2 个答案:

答案 0 :(得分:0)

您可以尝试在子查询中对使用用户名的计数组使用内部联接

UPDATE A
SET A.[Present Count] = t.my_count
FROM Accounts AS A
INNER JOIN  (
  SELECT username, Count(*) AS my_count
  FROM Table1 
  WHERE Table1.Attendance = 'P'
  GROUP BY username
) AS t ON A.Username = t.Username

答案 1 :(得分:0)

正确的语法是:

UPDATE Accounts
    SET [Present Count] = (SELECT Count(*)
                           FROM Table1
                           WHERE Table1.Attendance = 'P' AND
                                 Accounts.Username = Table1.Username
                          );

编辑:

这返回什么值?

SELECT UserName, Count(*)
FROM Table1
WHERE Table1.Attendance = 'P' 
GROUP BY Username

也许您所看到的'P'并不是'P',而您只是因为所有内容都得到0,因为没有匹配项。