访问 SQL 将显示多个 maximum/minimum 值及其对应的大小写
Access SQL that will display multiple maximum/minimum values and their corresponding case
我正在尝试在 Microsoft Access 中创建一个 SQL 查询,它将为下面的每个字段生成 maximum/minimum 值,并 return 附上相应的大小写
**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);
此外,如果有多个相同的 max/min 值,是否可以只选择一个值。
关于table,包括此处显示的字段在内,总共有40个字段需要计算max/min个值。 records/cases的人数在3万左右。
我有 14 个相似的 table,我需要对它们进行 运行 相似的查询(案例名称,顺序相同,在所有案例中都是通用的)。正如您可以想象的那样,我希望将必要的查询数量保持在最低限度。
如果 Access SQL 有限制,是否可以使用 VBA 来实现?
查找电子表格的任务。
无论如何:
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 查询中,可以使用 user-defined 函数完成此测试 on-the-fly。
SELECT Case, Flxmax, Flxmin, Frxmax, Frxmin,
MAXPOSITIONz([Flxmax],[Flxmin],[Frxmax],[Frxmin]) As FieldPos,
Choose([FieldPos],"Flxmax","Flxmin","Frxmax","Frxmin") As Choose1,
Choose([FieldPos],[Flxmax],[Flxmin],[Frxmax],[Frxmin]) As Choose2
FROM MyTable
结果:
Case Flxmax Flxmin Frxmax Frxmin FieldPos Choose1 Choose2
aaaa 100000 100000 100000 100000 1 Flxmax 100000
bbbb 100000 100009 100008 100007 2 Flxmin 100009
cccc 100000 100001 100099 100099 3 Frxmax 100099
dddd 100001 100002 100003 100004 4 Frxmin 100004
函数:
'This function combines the features of Excel MAX() and Access Nz() to find Max, and allows Null or String'
Public Function MAXPOSITIONz(ParamArray ParameterData() As Variant) As Currency
Dim Result As Currency: Result = 0
Dim p As Variant
Dim i as Long
Dim ArrayLength as Long: ArrayLength = UBound(ParameterData) - LBound(ParameterData)
Dim Position as Long: Position = 1
If ArrayLength < 1 Then Return 1
For i = 0 to ( UBound(ParameterData) - LBound(ParameterData) )
If IsNumeric(Nz(ParameterData(i), "")) Then
If CCur(ParameterData(i)) > Result Then
Result = CCur(p)
Position = i
End If
End If
Next i
MAXPOSITIONz = Position
End Function
也可以使用仅 returns 最大值的通用函数:
MAXz([Field01],[Field02], etc ...) 'Decimal Numbers
Int( MAXz([Field01],[Field02], etc ...) ) 'Whole numbers
CDate( MAXz([Field01],[Field02], etc ...) ) 'Date with time
CDate( Int( MAXz([Field01],[Field02], etc ...) ) ) 'Date without time
泛型函数:
''This function combines the features of Excel MAX() and Access Nz() to find Max,
''and allows Null or String
Public Function MAXz(ParamArray ParameterData() As Variant) As Currency
Dim Result As Currency: Result = 0
Dim p As Variant
For Each p In ParameterData
If IsNumeric(Nz(p, "")) Then _
If CCur(p) > Result Then _
Result = CCur(p)
Next p
MAXz = Result
End Function
“作为货币”returns 十进制数。如果你不想要小数,你可以专门为 Date 或 Long 调整代码。
我正在尝试在 Microsoft Access 中创建一个 SQL 查询,它将为下面的每个字段生成 maximum/minimum 值,并 return 附上相应的大小写
**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);
此外,如果有多个相同的 max/min 值,是否可以只选择一个值。
关于table,包括此处显示的字段在内,总共有40个字段需要计算max/min个值。 records/cases的人数在3万左右。
我有 14 个相似的 table,我需要对它们进行 运行 相似的查询(案例名称,顺序相同,在所有案例中都是通用的)。正如您可以想象的那样,我希望将必要的查询数量保持在最低限度。
如果 Access SQL 有限制,是否可以使用 VBA 来实现?
查找电子表格的任务。
无论如何:
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 查询中,可以使用 user-defined 函数完成此测试 on-the-fly。
SELECT Case, Flxmax, Flxmin, Frxmax, Frxmin,
MAXPOSITIONz([Flxmax],[Flxmin],[Frxmax],[Frxmin]) As FieldPos,
Choose([FieldPos],"Flxmax","Flxmin","Frxmax","Frxmin") As Choose1,
Choose([FieldPos],[Flxmax],[Flxmin],[Frxmax],[Frxmin]) As Choose2
FROM MyTable
结果:
Case Flxmax Flxmin Frxmax Frxmin FieldPos Choose1 Choose2
aaaa 100000 100000 100000 100000 1 Flxmax 100000
bbbb 100000 100009 100008 100007 2 Flxmin 100009
cccc 100000 100001 100099 100099 3 Frxmax 100099
dddd 100001 100002 100003 100004 4 Frxmin 100004
函数:
'This function combines the features of Excel MAX() and Access Nz() to find Max, and allows Null or String'
Public Function MAXPOSITIONz(ParamArray ParameterData() As Variant) As Currency
Dim Result As Currency: Result = 0
Dim p As Variant
Dim i as Long
Dim ArrayLength as Long: ArrayLength = UBound(ParameterData) - LBound(ParameterData)
Dim Position as Long: Position = 1
If ArrayLength < 1 Then Return 1
For i = 0 to ( UBound(ParameterData) - LBound(ParameterData) )
If IsNumeric(Nz(ParameterData(i), "")) Then
If CCur(ParameterData(i)) > Result Then
Result = CCur(p)
Position = i
End If
End If
Next i
MAXPOSITIONz = Position
End Function
也可以使用仅 returns 最大值的通用函数:
MAXz([Field01],[Field02], etc ...) 'Decimal Numbers
Int( MAXz([Field01],[Field02], etc ...) ) 'Whole numbers
CDate( MAXz([Field01],[Field02], etc ...) ) 'Date with time
CDate( Int( MAXz([Field01],[Field02], etc ...) ) ) 'Date without time
泛型函数:
''This function combines the features of Excel MAX() and Access Nz() to find Max,
''and allows Null or String
Public Function MAXz(ParamArray ParameterData() As Variant) As Currency
Dim Result As Currency: Result = 0
Dim p As Variant
For Each p In ParameterData
If IsNumeric(Nz(p, "")) Then _
If CCur(p) > Result Then _
Result = CCur(p)
Next p
MAXz = Result
End Function
“作为货币”returns 十进制数。如果你不想要小数,你可以专门为 Date 或 Long 调整代码。