繁体   English   中英

MS-Access SQL DISTINCT GROUP BY

[英]MS-Access SQL DISTINCT GROUP BY

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

+----+-------------+-----------+
| 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会忽略组边界并且只提及一次 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 来实现这一点。

这应该有效:

SELECT DISTINCT GroupNumber, FirstNames
FROM Example AS b

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

Select GroupNumber,  FirstNames
From input
Group By GroupNumber, FirstNames

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM