【问题标题】:Access SQL that will display multiple maximum/minimum values and their corresponding case访问将显示多个最大值/最小值及其对应情况的 SQL
【发布时间】:2015-05-08 13:55:51
【问题描述】:

我正在尝试在 Microsoft Access 中创建一个 SQL 查询,该查询将为下面的每个字段生成最大值/最小值并返回相应的大小写

**Force Table**
case            Flxmax   Flxmin  Frxmax  Frxmin 
hs00p16010od    582.24   666.81  796.44  -451.15    
hs00p16015od    878.7    878.7   1096.3  -500.36    
hs00p16020od    1071.95  1071.9  1281.2  -743.05    
hs00p16025od    1186.65  1186.6  1397.8  -959.36    

期望的输出

Flxmax   1186.65   hs00p16025od
Flxmin   666.81    hs00p16010od
Frxmax   1397.8    hs00p16025od
Frxmin   -959.36   hs00p16025od

当前代码(仅最大化 1 个字段,不能为相同的值选择 1 个最大值)

SELECT case, [Flxmax]
FROM Force
WHERE [Flxmax] = (SELECT max([Flxmax]) FROM Force);

此外,如果有多个相同的最大值/最小值,是否可以只选择一个。

关于表格,总共有 40 个字段,包括此处显示的需要计算最大值/最小值的字段。记录/病例数约为30,000。

我有 14 个类似的表,我需要对它们运行类似的查询(案例名称,以相同的顺序,在所有表中都很常见)。正如您可以想象的那样,我希望将必要的查询数量保持在最低限度。

如果 Access SQL 有限制,是否可以使用 VBA 来完成?

【问题讨论】:

  • 我正试图绕过这个,因为它是一个非常奇怪的模式。至于你的问题if there are multiple identical max/min values is there a way to pick just one这真的取决于你。你会用什么方法来选择一个?也许 Max(case) 或 Min(case) 获胜?

标签: sql ms-access vba


【解决方案1】:

为电子表格查找任务。

无论如何:

Select "Flxmax" As FField, [case], [Flxmax] 
From (SELECT case, [Flxmax]
    FROM Force
    WHERE [Flxmax] = (SELECT Max([Flxmax]) FROM Force))
Union All
Select "Flxmin" As FField, [case], [Flxmin] 
From (SELECT case, [Flxmin]
    FROM Force
    WHERE [Flxmin] = (SELECT Min([Flxmin]) FROM Force))
Union All    
Select "Frxmax" As FField, [case], [Frxmax] 
From (SELECT case, [Frxmax]
    FROM Force
    WHERE [Frxmax] = (SELECT Max([Frxmax]) FROM Force))
Union All    
Select "Frxmin" As FField, [case], [Frxmin] 
From (SELECT case, [Frxmin]
    FROM Force
    WHERE [Frxmin] = (SELECT Min([Frxmin]) FROM Force))

等等。

【讨论】:

  • 这是使用 SQL 的唯一方法。我试图想办法解决将这么多 SQL 语句联合在一起编写的方法,但是 OPs 模式需要联合来实现这一点。电子表格是一种方法,但我认为快速而肮脏的 VBA 子程序也可以解决问题。不知道哪个方向会更痛苦。
  • 好吧,您要求使用 SQL,但我肯定会为此使用 VBA。对于每个最小/最大字段,循环记录集一次(30000 条记录并不多)找到最小/最大值,找到记录并将该记录写入另一个表。然后下一个字段,直到没有更多字段。比编写繁琐的 SQL 有趣得多。
  • 我认为如果 VBA 代码只包含循环而不是一系列联合,它将运行得更快。如果是这种情况,我宁愿走 VBA 路线。由于数据量滞后于 Excel(我切换到 Access 等数据库的主要原因),我选择避免使用电子表格。任何人都可以链接一个 VBA 示例来解决我可以参考的类似问题,因为我不熟悉它。
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
相关资源
最近更新 更多