2016-11-29 77 views
1

我有一个查询,我想分组显示每个值的数量在一个字段中的数量,并希望联合第二个查询应该显示总计和所有项目的计数。这是我的查询的摘要。MS ACCESS SQL如何联盟与组通过显示总计

SELECT a.[Field to Count], Count(a.[Field to Count]) as Count 
FROM MyTable as a 
Where a.[Some Field] = "Value1" AND a.[Some other Field] <> "Some value" 
Group By a.[Field to Count] 
UNION 
SELECT "Grand Total", Count(*) 
FROM MyTable as a 
Where a.[Some Field] = "Value1" AND a.[Some other Field] <> "Some value" 
Group By ? 

什么是想是这样的:
场伯爵=========计数
值1 ================值1的计数
Value2 ================值的计数2
Value3 ================计数值3
“Grand Total” =========所有字段的计数值

我知道,没有Group By在第二个查询中它不会显示任何东西,所以我知道我需要使用它。基本上像“分组*”

有什么建议吗?

回答

1

我不确定在第二个查询中是否需要GROUP BY,或者如果这样做更有意义。相反,只需选择总表计数:

SELECT t.label, t.count 
FROM 
(
    SELECT a.[Field to Count] AS label, 
      COUNT(*) AS count, 
      0 AS pos 
    FROM MyTable as a 
    WHERE a.[Some Field] = "Value1" AND a.[Some other Field] <> "Some value" 
    GROUP BY a.[Field to Count] 
    UNION 
    SELECT "Grand Total" AS label, 
      COUNT(*) AS count, 
      1 AS pos 
    FROM MyTable as a 
    WHERE a.[Some Field] = "Value1" AND a.[Some other Field] <> "Some value" 
) t 
ORDER BY t.pos, t.label 

注意,我加了一个计算列posUNION每个子查询可以订购总计最后。请注意,在外部查询中,我实际上并未选择pos,因为我们不希望它在结果集中,我们只希望它用于排序。

+0

嘿什么是行: '0作为POS' 和 '1 AS POS机' 呢? –

+0

@RobertMazurowski我在'UNION'的每个子查询中添加一个计算列,以便您的总计最后显示。这可能已经在原始查询中发生,但不能保证。 –

+0

感谢编辑,这是一个非常好的答案 –

1

减少添的一点是外选择不需要:

SELECT a.[Field to Count] AS label, 
     COUNT(*) AS [count], 
     0 AS pos 
FROM MyTable as a 
WHERE a.[Some Field] = "Value1" AND a.[Some other Field] <> "Some value" 
GROUP BY a.[Field to Count] 
UNION 
SELECT "Grand Total" AS label, 
     COUNT(*) AS [count], 
     1 AS pos 
FROM MyTable as a 
WHERE a.[Some Field] = "Value1" AND a.[Some other Field] <> "Some value" 
ORDER BY 2, 1 
+0

古斯塔夫你为什么把数字放在[]括号内? –

+0

设计师做到了。我想这是因为它是一个保留字,尽管我相信查询将不会运行。 – Gustav

+0

Gustav ORDER BY部分似乎不起作用,它说a.pos不是select语句的一部分。 –