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

Sql 如何根据另一个表中某个值的计数设置一个表中的值,sql,ms-access,Sql,Ms Access,我正在使用的数据库(它与表1有关系): 我想根据表1中的“p”字符数设置帐户中的当前计数。考勤(现在,它是手动设置的)。我试着做一个类似这样的“计数”查询 UPDATE Accounts SET [Present Count] = (SELECT Count(*) FROM Table1 WHERE Table1.Attendance = 'P') WHERE Accounts.Username = Table1.Username 我也试过了 SELECT Count(Table1.Att

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

我想根据表1中的“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”的总数计算得出的计数。您可以尝试在“按用户名计数”组的子查询中使用内部联接

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
正确的语法是:

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
,因为没有匹配项。

我必须在表1中首先创建一个“我的计数”字段吗?如果是这样,我如何对不同的用户名进行不同的计数?我的计数是subqiry的别名。。以及相关的join子句。。在两个表之间连接不同的用户名,以便您拥有与accounts.中的用户名关联的正确用户名计数,以及分配相应结果的设置值。请在第3行添加示例数据时给我一个语法错误“缺少运算符”。我检查了,此查询显示了当前的手动设置值计数我希望他们被计算出来,并有他们相应的用户名显示在旁边them@HyperBrid . . . 此查询不显示任何内容。它应该修复您的
更新
查询中的错误。当我运行它时,它不会更改计数