每行循环行

时间:2016-05-31 16:57:45

标签: sql vba access

我显示基于此SQL的访问报告:

SELECT DISTINCT Plan_charge.Num_utilisateur, RecupProjet(Num_utilisateur) AS LesProjets
FROM Plan_charge;

VBA中的“RecupProjet”功能是:

Public Function RecupProjet(Num_utilisateur As String) As String

Dim res As DAO.Recordset
Dim SQL As String
'Selectionne les participant du projet
SQL = "SELECT Num_EB_Tache FROM Plan_charge WHERE Num_utilisateur=" & _
          Chr(34) & Num_utilisateur & Chr(34)
Set res = CurrentDb.OpenRecordset(SQL)
'Concatene les différents enregistrement
While Not res.EOF
RecupProjet = RecupProjet & res.Fields(0).Value & " "
res.MoveNext
Wend
'Enleve le dernier espace
RecupProjet = Left(RecupProjet, Len(RecupProjet) - 1)
'libere la mémoire
Set res = Nothing

End Function

以下是我在代码后面显示的示例报告:

Image here

现在,我想在此报告中逐行输入数据,并根据列Total_charge生成一列(Plan_charge我的表Num_utilisateur)的总和(对于SQL中的示例:WHERE Num_utilisateur = Me.Num_utilisateur.Value)并将总数放在名为ChargeTotale的文本框中。

你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我会这样做:

SELECT DISTINCT Plan_charge.Num_utilisateur,
 RecupProjet(Plan_charge.Num_utilisateur) AS LesProjets, T.ChargeTotale
FROM Plan_charge INNER JOIN 
(SELECT Num_utilisateur, SUM(Total_charge) AS ChargeTotale
 FROM Plan_charge 
 GROUP BY Num_utilisateur) T 
ON Plan_charge.Num_utilisateur = T.Num_utilisateur

如果您不需要Plan_charge中的任何其他字段,您可以这样做:

SELECT Num_utilisateur, RecupProjet(Num_utilisateur) AS LesProjets,
 SUM(Total_charge) AS ChargeTotale
FROM Plan_charge 
GROUP BY Num_utilisateur, RecupProjet(Num_utilisateur)