【发布时间】:2021-01-18 10:36:35
【问题描述】:
我有一个 Excel 电子表格,我用它作为我的牛奶回合的关系数据库。我使用 Excel(Mac 2011 版)中的 MS Query 查询此数据库以生成我的交货路线。其中一列是客户地址,我希望每个订单显示一次,即在显示多个其他行的同时仅对该列进行不同的查询。这纯粹是为了美观,让电子表格不那么杂乱。
我用作数据库的主电子表格有我截取的列标题,并附有一些示例数据:
从这个主电子表格中,我使用 MS Query 生成我的送货路线,如下所示:
如您所见,查询生成的路由中有很多重复数据。我想做的是每个客户的订单只有一个地址实例,这将有助于在 iPad 中打开路线时的易读性。我隐藏了其他在这方面没有必要提供帮助的列。
*编辑 从下面的隔离的 cmets 中,这是从查询返回的数据的理想外观的屏幕截图:
我已经手动删除了名称和地址栏中的重复信息以达到预期的效果。我还隐藏了一些不必要的列,并使用一些条件格式规则来帮助区分每个客户的订单。
编辑*
我尝试过使用 group by 子句和以下窗口函数,但无法使用:
SELECT *
FROM (
SELECT “All Orders”.”Route ID”,
“All Orders”.Name,
“All Orders”.Address
ROW_NUMBER() OVER(PARTITION BY “All Orders”.Address
ORDER BY “All Orders”.Address DESC) AS row_number
FROM “All Orders”
) AS rows
WHERE row_number = 1;
每当我尝试运行查询时,我都会收到有关语法的错误消息。希望有人能告诉我哪里出错了!
【问题讨论】:
-
您希望输出看起来如何?例如,Jane Bloggs 是否仍然有两行,但您只想在第一行显示地址?另外,为什么 Joe Generic 有两个 acc_id,其中一个与 Jane Bloggs 匹配?
-
是的,正是您所描述的。 Jane Bloggs 的地址栏中只有一个地址,但她的订单有两行。 Joe Generic 有 2 个 acc_id 是一个错字!
-
我想你不想从返回你的第二个屏幕截图的查询中只选择不同的地址?如果您仍然需要显示所有内容(每个帐户多行),那么 MS Query 是否支持排名功能?也许您可以将每个帐户/行(acc 1、rank 1-2-3...acc2、rank 1-2-3 等等)作为子查询进行排名。然后使用 case 语句,例如 (case when acct_prod_rank = 1 then address else ' ')。
-
我已经编辑了我的原始问题,以包含理想结果的屏幕截图。我不确定 MS Query 是否支持 rank 函数并且不知道正确的语法!
标签: excel distinct-values ms-query