我有一个表,该表中有一个名为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
等
您可以将表本身连接起来,并检查连接记录中是否存在字母
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
这将为每个父行复制包含父行的每个符号的子行数,然后计算行数。
或者,您可以使用子查询,但是此解决方案的性能可能会更快。
创建此查询:
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