MS-Access SQL DISTINCT GROUP BY

时间:2016-09-27 17:11:52

标签: sql ms-access group-by distinct

我目前正在尝试使用Microsoft Access 2010 SELECT DISTINCT FirstNames GROUP。{
我表格的简化相关列如下所示:

+----+-------------+-----------+
| ID | GroupNumber | FirstName |
+----+-------------+-----------+
|  1 |           1 | Peter     |
|  2 |           1 | Bob       |
|  3 |           1 | Peter     |
|  4 |           2 | Rosemary  |
|  5 |           2 | Jamie     |
|  6 |           3 | Peter     |
+----+-------------+-----------+

我的实际表包含两列我想要应用此过程(单独),但我应该能够简单地重复另一列的过程。列组编号是一种简化,我的表实际上将十天间隔内的所有行组合在一起,但我已经解决了这个问题。

我希望它能归还:

+-------------+------------+
| GroupNumber | FirstNames |
+-------------+------------+
|           1 | Peter      |
|           1 | Bob        |
|           2 | Rosemary   |
|           2 | Jamie      |
|           3 | Peter      |
+-------------+------------+

这意味着我想要每个组的所有Distinct FirstNames 常规DISTINCT会忽略组边界,只提一次Peter。所有聚合函数都会将输出减少到只有一个值,或者根本不对字符串起作用。 Access也不支持SELECT非聚合列或GROUP BY语句中的列。

我发现所有其他答案要么是聚合,不适用于MS Access,要么通过以不适用于我的情况的方式处理数据来解决。 (标准化语言是一件好事,不是吗?)

我当前的(无效)查询如下所示:

SELECT GroupNumber,
    DISTINCT FirstNames -- This is illegal, distinct applies to all
                        -- columns and doesn't respect groups.
FROM Example AS b
-- Complicated stuff to make the groups
GROUP BY GroupNumber;

这个查询是一次性的,用于分析从另一个数据库导出的58000行 excel电子表格(不是我的错),因此不需要优化运行时。

我想完全通过SQL实现这一点,如果可能的话,没有VBA。

2 个答案:

答案 0 :(得分:2)

这应该有效:

SELECT DISTINCT GroupNumber, FirstNames
FROM Example AS b

答案 1 :(得分:1)

此问题的解决方案将同时按GroupNumber和FirstName列进行分组。查询如下:

Select GroupNumber,  FirstName
From input
Group By GroupNumber, FirstName

(标准化语言是一件好事,不是吗?)