Microsoft Access如何计算一个值及其在字段中列出的所有排列的次数?

问题描述 投票:2回答:2

我有一个表,该表中有一个名为Results的字段,其值为3位数字。我已经使用了count函数来报告该查询在所述字段中重复值的次数。

SELECT [My Table].Results, Count([My Table].Results) AS [Total Results]
FROM [My Table]
GROUP BY [My Table].Results;

我如何使用计数功能还返回也在字段中重复的3位数字的所有组合?

示例

Results    Count

123        1
132        1
213        1
789        1
798        1
879        1
897        1

查询后,我希望显示该字段中所有值的计数。

Results  Count

123      3
132      3
213      3
789      4
798      4
879      4
897      4

sql ms-access ms-access-2016
2个回答
0
投票

您可以将表本身连接起来,并检查连接记录中是否存在字母

SELECT [parent].Results, Count([parent].Results) AS [Total Results]
FROM (SELECT DISTINCT Results FROM [My Table]) parent, [My Table] child
WHERE 
          child.Results = Left(parent.Results, 1) & Mid(parent.Results, 2, 1) & Right(parent.Results, 1) OR
          child.Results = Left(parent.Results, 1) & Right(parent.Results, 1) & Mid(parent.Results, 2, 1) OR
          child.Results = Mid(parent.Results, 2, 1) & Left(parent.Results, 1) &  Right(parent.Results, 1) OR
          child.Results = Mid(parent.Results, 2, 1) & Right(parent.Results, 1) & Left(parent.Results, 1) OR
          child.Results = Right(parent.Results, 1)  & Left(parent.Results, 1) & Mid(parent.Results, 2, 1) OR
          child.Results = Right(parent.Results, 1) & Mid(parent.Results, 2, 1) & Left(parent.Results, 1)
GROUP BY parent.Results

这将为每个父行复制包含父行的每个符号的子行数,然后计算行数。

或者,您可以使用子查询,但是此解决方案的性能可能会更快。


0
投票

创建此查询:

SELECT t.Results, MIN(t.c) & (VAL(LEFT(Results,1))+VAL(MID(Results,2,1))+VAL(RIGHT(Results,1))-MIN(t.c)-MAX(t.c)) & MAX(t.c) AS c
FROM (
  SELECT Results, LEFT(Results, 1) AS c FROM [My Table] UNION ALL   
  SELECT Results, MID(Results, 2, 1) FROM [My Table] UNION ALL   
  SELECT Results, RIGHT(Results, 1) FROM [My Table] 
)  AS t
GROUP BY t.Results;

并将其另存为“我的查询”。然后对此[我的查询]和group by Results进行自我联接:

SELECT q1.Results, COUNT(*) AS [Count] 
FROM [My Query] AS q1 INNER JOIN [My Query] AS q2 
ON q2.c = q1.c 
GROUP BY q1.Results
© www.soinside.com 2019 - 2024. All rights reserved.