【问题标题】:Query to select a row based on a list of summary values查询以根据汇总值列表选择行
【发布时间】:2020-07-13 21:58:28
【问题描述】:

我想知道是否有一种方法可以在不编写 VBA 代码的情况下在 Microsoft Access (2010) 中执行此结果查询。

我有一个这样的数据表(更多字段,但只显示重要的字段):

Customer ID       City Name
1                 Chicago
2                 Chicago
3                 New York
4                 San Antonio
5                 Seattle
6                 Seattle
7                 Walbash
8                 Walbash

我只想为每个城市选择一行。例如,我想为芝加哥选择第 1 行或第 2 行。

产生的结果与此类似

Customer ID       City Name
1                 Chicago
3                 New York
4                 San Antonio
etc

【问题讨论】:

    标签: ms-access vba ms-access-2010


    【解决方案1】:

    试试这样的:

    select *
    from Table1 t1
    where t1.CustomerID = (select min(t2.CustomerID) from table1 t2 where t1.CityName = t2.CityName)
    order by t1.CustomerID
    

    【讨论】:

    • 这对我有用。但是,它运行了很长时间。所以我把它分成两个不同的任务。第一个任务创建了 CITY 列表的摘要和最小的 CustomerID。然后在我的原始表格中添加了一个“选择字段”列。然后,我根据汇总表更新了选择字段(将其加入 City 和(min)CustomerID 到 CustomerID)。这效果很好。
    【解决方案2】:
    SELECT First(Table1.CustomerID) AS FirstOfCustomerID, Table1.CityName
    FROM Table1
    GROUP BY Table1.CityName;
    

    使用First() 的其他选项示例为Min()Max()

    编辑:

    创建上述查询,然后与原始表进行连接以选择记录。我把上面的查询命名为Q1,原表是Table1

    SELECT Q1.FirstOfCustomerID, Q1.CityName, Table1.Data
    FROM Q1 INNER JOIN Table1 ON Q1.FirstOfCustomerID = Table1.CustomerID;
    

    【讨论】:

    • 感谢您的回复。我了解如何进行分组。我只需要从每个组中选择一个记录。我可以在一个查询中执行此操作,或者将其分解并标记每个组的第一条记录。
    • 我想我不明白。您需要重新表述您的原始问题,以帮助我更好地理解,因为这正是您在问题中描述的内容
    • 啊,我想我明白你的意思了,你有其他独特的字段并且想要选择该记录。我已经编辑了我的答案。
    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多