我使用此查询:
SELECT
Data.[Group],
IIf((SELECT GroupA FROM AccessRights WHERE Data = "Data1")="y",[Data1],Null) AS Data_1,
IIf((SELECT GroupA FROM AccessRights WHERE Data = "Data2")="y",[Data2],Null) AS Data_2,
IIf((SELECT GroupA FROM AccessRights WHERE Data = "Data3")="y",[Data3],Null) AS Data_3,
IIf((SELECT GroupA FROM AccessRights WHERE Data = "Data4")="y",[Data4],Null) AS Data_4
FROM
Data
WHERE
((Data.[Group])="GroupA");
对于这个结果:
Group | Data_1 | Data_2 | Data_3 | Data_4
--------+--------+--------+--------+--------
GroupA | | | 9 | 4
GroupA | | | 1 | 5
我只是隐藏Data1
和Data2
值。
如果你真的想隐藏的列,您需要使用我创建一个VBA函数,将根据您的团给你的最终查询字符串VBA:
Function myQuery(groupName As String) As String
Dim strResult As String
Dim rs As Recordset
Dim i As Integer
strResult = "SELECT [DATA].[Group]"
Set rs = CurrentDb.OpenRecordset("SELECT [Data], [" & groupName & "] FROM AccessRights WHERE [" & groupName & "] = ""y""")
For i = 0 To rs.RecordCount
strResult = strResult & "," & rs.Fields("Data").Value
rs.MoveNext
Next i
strResult = strResult & " FROM [Data] WHERE ((Data.[Group])=""" & groupName & """)"
myQuery = strResult
End Function
例如; myQuery("GroupA")
将是
SELECT [DATA].[Group],Data3,Data4 FROM [Data] WHERE ((Data.[Group])="GroupA")
那么,请你告诉我们哪些标准答案必须满足才能被你接受为答案?如果您需要运行VBA代码来解决问题,还是只与查询设计人员一起工作,是否可以接受? – Binarus
我宁愿只在SQL中执行它。但是,如果不改变我的数据结构,这似乎是不可能的。所以VBA也不错。 – ZygD
这个问题的根源在于模式。我不确定你想要解决什么问题,但是这个表格/栏目设计不好。这就是为什么你遇到SQL问题。如果您将“y”分配给AccessRights表的GroupA和GroupB列中的所有值,会发生什么情况?我认为你想建立的是一个基于角色的认证系统。你的表格会有所不同。 – itsben