Vba 最多200个问题的条件聚合查询的行和更新SQL。我甚至添加了一个交叉表查询。非常感谢您花时间提供这些示例。我想我理解您试图传达的内容,并且可能需要对动态查询进行一些编辑,因为我的实际表中的字段名不是连续的,实际上没有特定的顺序。我将在处理您的示例时提供更新
Vba 最多200个问题的条件聚合查询的行和更新SQL。我甚至添加了一个交叉表查询。非常感谢您花时间提供这些示例。我想我理解您试图传达的内容,并且可能需要对动态查询进行一些编辑,因为我的实际表中的字段名不是连续的,实际上没有特定的顺序。我将在处理您的示例时提供更新,vba,ms-access,recordset,Vba,Ms Access,Recordset,最多200个问题的条件聚合查询的行和更新SQL。我甚至添加了一个交叉表查询。非常感谢您花时间提供这些示例。我想我理解您试图传达的内容,并且可能需要对动态查询进行一些编辑,因为我的实际表中的字段名不是连续的,实际上没有特定的顺序。我将在处理您的示例时提供更新。请参阅update now迭代表列以构建临时表和条件agg查询(后一个查询可以再次替换为交叉表查询)。太棒了!很高兴它起作用了。考虑在PIVOT之后创建一个表(选择*>从PIVoToValueQuase中的FialAlx结果)完成并使用该表进
最多200个问题的条件聚合查询的行和更新SQL。我甚至添加了一个交叉表查询。非常感谢您花时间提供这些示例。我想我理解您试图传达的内容,并且可能需要对动态查询进行一些编辑,因为我的实际表中的字段名不是连续的,实际上没有特定的顺序。我将在处理您的示例时提供更新。请参阅update now迭代表列以构建临时表和条件agg查询(后一个查询可以再次替换为交叉表查询)。太棒了!很高兴它起作用了。考虑在PIVOT之后创建一个表(<代码>选择*>从PIVoToValueQuase中的FialAlx结果)完成并使用该表进行后续分析/报告。仅在需要时运行pivot。您可以在整个表中循环,但从不重置
strOut
。所以它只是不断积累价值。如果您希望在查询中使用函数,正如您所期望的结果所建议的那样,这种方法根本不起作用。您需要执行完整的VBA或完整的查询。@Andre-这是有道理的,因为我从未重置strOut将是它累积值的原因。我已经尝试了几种方法来做出改变,但仍然无法达到预期的效果。既然你说这不起作用-我应该如何通过完整的VBA或查询来解决这个问题,还有更多的指导吗?谢谢你的输入,但我没能想出如何使它起作用@冻糕能让我到我需要的地方,只是想对你们的投入表示感谢。
CompanyID Q1 Q2 Q3 Q4 Q5
CompanyA I I N N I
CompanyB I I I I I
CompanyC I I N N N
Public Function NResponses(strTable As String)
On Error GoTo Err_Handler
Dim rs As DAO.Recordset
Dim fld As DAO.Field
Dim strOut As String
Dim lngLen As Long
Dim strSeperator As String
NResponses = Null
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("TableA")
strSeperator = ", "
Do While Not rs.EOF
With rs
For Each fld In .Fields
If fld.Value = "N" Then
strOut = strOut & fld.Name & strSeperator
End If
Next fld
rs.MoveNext
End With
Loop
rs.Close
Set rs = Nothing
'Clean Output - remove last comma from strOut
lngLen = Len(strOut) - Len(strSeperator)
If lngLen > 0 Then
MissingControls = Left(strOut, lngLen)
End If
Exit_Handler:
'Clean up
Set rs = Nothing
Exit Function
Err_Handler:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbExclamation, "NResponses()"
Resume Exit_Handler
End Function
CompanyID Q1 Q2 Q3 Q4 Q5 NResponses
CompanyA I I N N I Q1, Q3, Q4, Q5
CompanyB I I I I I Q1, Q3, Q4, Q5
CompanyC N I I N N Q1, Q3, Q4, Q5
CompanyID Q1 Q2 Q3 Q4 Q5 NResponses
CompanyA I I N N I Q3, Q4
CompanyB I I I I I
CompanyC N I I N N Q1, Q4, Q5
Dim strOut(10) ' array with 10 positions
Dim xAs Integer = 1 'var to array position
Do While Not rs.EOF
With rs
For Each fld In .Fields
If fld.Value = "N" Then
strOut(x) = strOut(x) & fld.Name & strSeperator
x=x+1
End If
Next fld
rs.MoveNext
End With
Loop