Select 具有 Microsoft 访问权限的行中的最大值 sql
Select highest value in row with microsoft access sql
所以我的table格式如下:
Project | type1 | type2 | type3 | type4
a | 0 | 1 | 1 | 2
b | 1 | 0 | 1 | 1
c | 0 | 0 | 0 | 0
我需要每一行的最大值,如下:
Project | max
a | 2
b | 1
c | 0
我无法在 access 中使用 switch() 函数,因为我有太多变量,它给出了 "too complex" 错误。有任何想法吗?
SELECT Switch(
[MaxOfBudget Trigger] = 2, "Critical",
[MaxOfSchedule Trigger] = 2, "Critical",
[MaxOfSubmittals Trigger] = 2, "Critical",
[MaxOfSafety Trigger] = 2, "Critical",
[MaxOfChange Orders Trigger] = 2, "Critical",
[MaxOfContingency Trigger] = 2, "Critical",
[MaxOfRFIs Trigger] = 2, "Critical",
[MaxOfBudget Trigger] = 1, "At Risk",
[MaxOfSchedule Trigger] = 1, "At Risk",
[MaxOfSubmittals Trigger] = 1, "At Risk",
[MaxOfSafety Trigger] = 1, "At Risk",
[MaxOfChange Orders Trigger] = 1, "At Risk",
[MaxOfContingency Trigger] = 1, "At Risk",
[MaxOfRFIs Trigger] = 1, "At Risk",
[MaxOfBudget Trigger] = 0, "Okay",
[MaxOfSchedule Trigger] = 0, "Okay",
[MaxOfSubmittals Trigger] = 0, "Okay",
[MaxOfSafety Trigger] = 0, "Okay",
[MaxOfChange Orders Trigger] = 0, "Okay",
[MaxOfContingency Trigger] = 0, "Okay",
[MaxOfRFIs Trigger] = 0, "Okay", )
AS test, [Project Triggers].[Project Number]
FROM [Project Triggers];
您的数据库未按应有的方式规范化。
您应该有一个 type
table,其中包含值 1,2,3,4,然后将 table 连接到您的 project
table。
|project | type_id | value |
+--------+---------+-------+
|a | 1 | 0 |
|a | 2 | 1 |
|a | 3 | 1 |
|a | 4 | 2 |
|b | 1 | 1 |
|b | 2 | 0 |
|b | 3 | 1 |
|b | 4 | 1 |
|c | 1 | 0 |
|c | 2 | 0 |
|c | 3 | 0 |
|c | 4 | 0 |
然后您可以执行 SELECT project, max(value) FROM project_type_values GROUP BY project;
之类的操作来获取结果。
我完全同意Daniël 的回答,希望您能够修改数据模型。但如果不能,您可以声明一个函数,该函数可以 return 最大的数字列表:
Function MaxOfList(ParamArray varValues()) As Variant
Dim i As Integer 'Loop controller.
Dim varMax As Variant 'Largest value found so far.
varMax = Null 'Initialize to null
For i = LBound(varValues) To UBound(varValues)
If varMax >= varValues(i) Then
'do nothing
Else
varMax = varValues(i)
End If
Next
MaxOfList = varMax
End Function
可以在
Allen Browne's Access Tips: MinOfList() and MaxOfList() functions
找到稍微更高级的版本及其 Min
对应版本
所以我的table格式如下:
Project | type1 | type2 | type3 | type4
a | 0 | 1 | 1 | 2
b | 1 | 0 | 1 | 1
c | 0 | 0 | 0 | 0
我需要每一行的最大值,如下:
Project | max
a | 2
b | 1
c | 0
我无法在 access 中使用 switch() 函数,因为我有太多变量,它给出了 "too complex" 错误。有任何想法吗?
SELECT Switch(
[MaxOfBudget Trigger] = 2, "Critical",
[MaxOfSchedule Trigger] = 2, "Critical",
[MaxOfSubmittals Trigger] = 2, "Critical",
[MaxOfSafety Trigger] = 2, "Critical",
[MaxOfChange Orders Trigger] = 2, "Critical",
[MaxOfContingency Trigger] = 2, "Critical",
[MaxOfRFIs Trigger] = 2, "Critical",
[MaxOfBudget Trigger] = 1, "At Risk",
[MaxOfSchedule Trigger] = 1, "At Risk",
[MaxOfSubmittals Trigger] = 1, "At Risk",
[MaxOfSafety Trigger] = 1, "At Risk",
[MaxOfChange Orders Trigger] = 1, "At Risk",
[MaxOfContingency Trigger] = 1, "At Risk",
[MaxOfRFIs Trigger] = 1, "At Risk",
[MaxOfBudget Trigger] = 0, "Okay",
[MaxOfSchedule Trigger] = 0, "Okay",
[MaxOfSubmittals Trigger] = 0, "Okay",
[MaxOfSafety Trigger] = 0, "Okay",
[MaxOfChange Orders Trigger] = 0, "Okay",
[MaxOfContingency Trigger] = 0, "Okay",
[MaxOfRFIs Trigger] = 0, "Okay", )
AS test, [Project Triggers].[Project Number]
FROM [Project Triggers];
您的数据库未按应有的方式规范化。
您应该有一个 type
table,其中包含值 1,2,3,4,然后将 table 连接到您的 project
table。
|project | type_id | value |
+--------+---------+-------+
|a | 1 | 0 |
|a | 2 | 1 |
|a | 3 | 1 |
|a | 4 | 2 |
|b | 1 | 1 |
|b | 2 | 0 |
|b | 3 | 1 |
|b | 4 | 1 |
|c | 1 | 0 |
|c | 2 | 0 |
|c | 3 | 0 |
|c | 4 | 0 |
然后您可以执行 SELECT project, max(value) FROM project_type_values GROUP BY project;
之类的操作来获取结果。
我完全同意Daniël 的回答,希望您能够修改数据模型。但如果不能,您可以声明一个函数,该函数可以 return 最大的数字列表:
Function MaxOfList(ParamArray varValues()) As Variant
Dim i As Integer 'Loop controller.
Dim varMax As Variant 'Largest value found so far.
varMax = Null 'Initialize to null
For i = LBound(varValues) To UBound(varValues)
If varMax >= varValues(i) Then
'do nothing
Else
varMax = varValues(i)
End If
Next
MaxOfList = varMax
End Function
可以在
Allen Browne's Access Tips: MinOfList() and MaxOfList() functions
Min
对应版本