经理报告

我需要帮助为我的报告创build一个SQL查询。 我需要提取的数据将显示:我公司有多less名pipe理人员有员工示例:2经理每人有4个指导。 喜欢这个:

Managers Employees 1 (number of managers not ID) 2 2 4 5 10 8 12 

Access数据库中的表结构:

Emplid,姓,名,Supervisorid,HRStatus

Emplid列包括Supervisorsid,因为它们是给员工的。

我试图在Excel中创build这样的报告,但失败:(

我切到VBA,但储存在SQL查询。

这里代码:

 Private Sub SWE_RAPORT() Dim db As ADODB.connection Dim rs As ADODB.Recordset Dim SQL As String, dbPath As String, conStr As String 'CHECK WHERE IS THE DB? With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = False .Title = "WHERE IS THE DB?" .Show dbPath = .SelectedItems(.SelectedItems.Count) End With 'CONNECT TO DB Set db = New ADODB.connection With db .Provider = "Microsoft.ACE.OLEDB.12.0" .connectionString = "Data Source=" & dbPath .Mode = adModeRead .Open End With 'SQL QUERY SQL = "SELECT A.SupervisorID, COUNT(A.Emplid) AS DIRECTS, A.HRStatus FROM (SELECT Emplid, SupervisorID, HRStatus FROM swe GROUP BY Emplid, SupervisorID, HRStatus) AS A WHERE A.HRStatus <> 'Terminated' and A.HRStatus <> 'Deceased' GROUP BY A.SupervisorID, A.HRStatus;" 'CONNECT TO RS Set rs = New ADODB.Recordset rs.Open SQL, db, adOpenStatic, adLockOptimistic 'LOAD DATA IN TO THE ACTIVE SHEET With ActiveWorkbook.Worksheets("Dane") .Cells.Clear .Range("A1").CopyFromRecordset rs End With 'CLOSE DB AND RECORDSET On Error Resume Next Set rs = Nothing rs.Close Set db = Nothing db.Close End Sub 

感谢您的帮助,MIREK

这应该为你工作:

 select count(b.SupervisorID) Managers, b.directs Employees from (SELECT A.SupervisorID, COUNT(A.Emplid) AS DIRECTS FROM swe A WHERE A.HRStatus <> 'Terminated' AND A.HRStatus <> 'Deceased' GROUP BY A.SupervisorID) b group by b.directs; 

在你的查询上试试这个:

 SELECT A.SupervisorID, COUNT(A.Emplid) AS DIRECTS, A.HRStatus FROM swe as A WHERE A.HRStatus <> 'Terminated' AND A.HRStatus <> 'Deceased' GROUP BY A.SupervisorID, A.Emplid, A.HRStatus 

你将不得不使用自己join这里。 由于每位员工的主pipe都是自己的员工。 因此,您必须计算主pipe人员ID与任何员工的EmplID匹配的员工数量。

 SELECT Sup.EmplID, COUNT(Emp.SupervisorID) AS DIRECTS, Sup.HRStatus FROM swe AS Sup LEFT JOIN swe AS Emp ON (Sup.Emplid = Emp.SupervisorID) WHERE Sup.HRStatus <> 'Terminated' and Sup.HRStatus <> 'Deceased' GROUP BY Sup.Emplid, Sup.HRStatus 

希望能帮助到你。 会很高兴回答问题。