Trying serialize a field for paycheck numbers

时间:2018-01-15 18:10:59

标签: sql ms-access

I'm running an append query to update a weekly payroll table. I need to create and store a serial number field for each employee who is getting paid that week. The number of employees who gets paid each week varies from 2-6. The serial number will be used on the employee's paystub to coincide with the check number.

What I have right now pulls the highest used/saved check number and adds +1 to get the next check number. However this next sequenced check number shows for all employees for that week.

I've got to be missing something little. How can I force it to generate a new serial number for each new record?

INSERT INTO tblTESTpayroll ( ID, EMPLOYEE, START, [END], [TOTAL PAY], 
                            [TOTAL TIPS], MARITIAL, [FED EXMPT], [STATE EXMPT], 
                            [SCHL DIST], SSNO, SSNOXX, [ADDT'L WTHLDNG], [CHCK NO] )

SELECT DISTINCTROW qryTESTpayrollgross.ID, 
               qryTESTpayrollgross.NAME, 
               Min(qryTESTpayrollgross.aptDate) AS [MIN DATE], 
               Max(qryTESTpayrollgross.aptDate) AS [MAX DATE], 
               Sum(qryTESTpayrollgross.TPay) AS [TOTAL PAY], 
               Sum(qryTESTpayrollgross.TTip) AS [TOTAL TIP], 
               tblEmployee.empMarital AS MARITIAL, 
               tblEmployee.empFedFile AS [FED EXMPT], 
               tblEmployee.empStFile AS [STATE EXMPT], 
               tblEmployee.empSchlDst AS [SCHL DIST], 
               tblEmployee.empSS AS [SS NO], 
               dbo_Employee.empEmail AS [SS NO CODED], 
               tblEmployee.empAddtlWthdng AS [ADDTL WTHLDNG], 
               Nz(DMax("[CHCK NO]","tblTESTpayroll"),0)+1 AS [CHECK NO]

FROM ((qryTESTpayrollgross INNER JOIN tblEmployee ON qryTESTpayrollgross.ID = tblEmployee.ID) 
                           INNER JOIN dbo_Employee ON qryTESTpayrollgross.ID = dbo_Employee.empId) 
                           INNER JOIN tblTESTpayroll ON qryTESTpayrollgross.ID = tblTESTpayroll.ID

GROUP BY qryTESTpayrollgross.ID, 
         qryTESTpayrollgross.NAME, 
         tblEmployee.empMarital, 
         tblEmployee.empFedFile, 
         tblEmployee.empStFile, 
         tblEmployee.empSchlDst, 
         tblEmployee.empSS, 
         dbo_Employee.empEmail, 
         tblEmployee.empAddtlWthdng;

1 个答案:

答案 0 :(得分:0)

INSERT INTO tblEmployeePayroll ( ID, EMPLOYEE, START, [END], [TOTAL PAY], [TOTAL TIPS], MARITIAL, [FED EXMPT], [STATE EXMPT], [SCHL DIST], SSNO, SSNOXX, [ADDT'L WTHLDNG], [CHCK NO] )
SELECT DISTINCTROW qryWeeklyPayrollPrep.ID, 
                   qryWeeklyPayrollPrep.NAME, 
                   qryWeeklyPayrollPrep.Min, 
                   qryWeeklyPayrollPrep.Max, 
                   qryWeeklyPayrollPrep.[TOTAL PAY], 
                   qryWeeklyPayrollPrep.[TOTAL TIP], 
                   tblEmployee.empMarital AS MARITIAL, 
                   tblEmployee.empFedFile AS [FED EXMPT], 
                   tblEmployee.empStFile AS [STATE EXMPT], 
                   tblEmployee.empSchlDst AS [SCHL DIST], 
                   tblEmployee.empSS AS [SS NO], 
                   dbo_Employee.empEmail AS [SS NO CODED], 
                   tblEmployee.empAddtlWthdng AS [ADDTL WTHLDNG], 
                   Nz(DMax("[CHCK NO]","tblEmployeePayroll"),0)+DCount("ID","qryWeeklyPayrollPrep","ID<=" & [dbo_Employee].[empID]) AS [CHECK NO]
FROM ((qryWeeklyPayrollPrep LEFT JOIN dbo_Employee ON qryWeeklyPayrollPrep.ID = dbo_Employee.empId) 
                            LEFT JOIN tblEmployeePayroll ON qryWeeklyPayrollPrep.ID = tblEmployeePayroll.ID) 
                            INNER JOIN tblEmployee ON qryWeeklyPayrollPrep.ID = tblEmployee.ID
GROUP BY qryWeeklyPayrollPrep.ID, 
         qryWeeklyPayrollPrep.NAME, 
         qryWeeklyPayrollPrep.Min, 
         qryWeeklyPayrollPrep.Max, 
         qryWeeklyPayrollPrep.[TOTAL PAY], 
         qryWeeklyPayrollPrep.[TOTAL TIP], 
         tblEmployee.empMarital, 
         tblEmployee.empFedFile, 
         tblEmployee.empStFile, 
         tblEmployee.empSchlDst, 
         tblEmployee.empSS, 
         dbo_Employee.empEmail, 
         tblEmployee.empAddtlWthdng, 
         Nz(DMax("[CHCK NO]","tblEmployeePayroll"),0)+DCount("ID","qryWeeklyPayrollPrep","ID<=" & [dbo_Employee].[empID]);

Nz(DMax())+ DCount()非常适合序列化工资核算号码。 我所要做的就是在此查询之前运行查询,以将每个唯一的EmpID#压缩为仅1条记录。每个EmpID#拥有超过1条记录,这让我感到头疼。

希望这有助于将来的人!!