【问题标题】:How can I use two or more COUNT()s in one SELECT statament?如何在一个 SELECT 语句中使用两个或多个 ACCOUNT?
【发布时间】:2010-03-17 05:42:22
【问题描述】:

我开发了这段代码:

SELECT COUNT(NewEmployee.EmployeeID), NewEmployee.EmployeeId,EmployeeName 
FROM NewEmployee INNER JOIN NewTimeAttendance  
  ON NewEmployee.EmployeeID = NewTimeAttendance.EmployeeID 
  and NewTimeAttendance.TotalTime is  null 
  and (NewTimeAttendance.note = '' or NewTimeAttendance.note is null)
  and (month = 1 or month = 2 or month = 3)  
GROUP BY NewEmployee.EmployeeID, EmployeeName
order by EmployeeID

根据我之前的两个问题 selecting null stuffcounting issue...令人惊叹的代码运行良好...但现在我需要 select 更多不止一个count...

...搜索(谷歌)....找到alias...尝试:

SELECT COUNT(NewEmployee.EmployeeID) as attenddays, COUNT(NewEmployee.EmployeeID) as empabsent
 , NewEmployee.EmployeeId,EmployeeName 
 FROM NewEmployee INNER JOIN NewTimeAttendance  
  ON empabsent =NewEmployee.EmployeeID = NewTimeAttendance.EmployeeID 
  and NewTimeAttendance.TotalTime is  null 
  and (NewTimeAttendance.note = '' or NewTimeAttendance.note is null )
    and (month=1 or month =2 or month = 3) , 
    attenddays = NewTimeAttendance.EmployeeID 
  and NewTimeAttendance.TotalTime is  null 
  and (NewTimeAttendance.note = '' or NewTimeAttendance.note is null )
    and (month=1 or month =2 or month = 3)
GROUP BY NewEmployee.EmployeeID, EmployeeName  order by EmployeeID

Incorrect syntax near '='.

第二次尝试:

SELECT COUNT(NewEmployee.EmployeeID) as attenddays, COUNT(NewEmployee.EmployeeID) as absentdays,
NewEmployee.EmployeeId,EmployeeName 
FROM NewEmployee INNER JOIN NewTimeAttendance  
  ON attenddays(NewEmployee.EmployeeID = NewTimeAttendance.EmployeeID 
  and NewTimeAttendance.TotalTime is  null 
  and (NewTimeAttendance.note = '' or NewTimeAttendance.note is null )
  and (month=1 or month =2 or month = 3)) ,
  absentdays(NewEmployee.EmployeeID = NewTimeAttendance.EmployeeID 
  and NewTimeAttendance.TotalTime is  null 
  and (NewTimeAttendance.note = '' or NewTimeAttendance.note is null )
  and (month=1 or month =2 or month = 3))
GROUP BY NewEmployee.EmployeeID, EmployeeName  order by EmployeeID

Incorrect syntax near '='.

不是很好的想法...所以...帮助

我想要的只是count 不同条件的ID...

COUNT(NewEmployee.EmployeeID)
ON NewEmployee.EmployeeID = NewTimeAttendance.EmployeeID 
  and NewTimeAttendance.TotalTime is  null 
  and (NewTimeAttendance.note = '' or NewTimeAttendance.note is null )
  and (month=1 or month =2 or month = 3)

COUNT(NewEmployee.EmployeeID)
ON NewEmployee.EmployeeID = NewTimeAttendance.EmployeeID 
  and NewTimeAttendance.TotalTime is not  null 
  and (NewTimeAttendance.note = '' or NewTimeAttendance.note is null )
  and (month=1 or month =2 or month = 3)

在同一个选择语句中。

提前致谢

【问题讨论】:

    标签: sql join count


    【解决方案1】:

    您似乎正试图找出每位员工出勤和缺勤的天数。我会推荐这样的查询:

    SELECT EmployeeId, EmployeeName,
        (SELECT COUNT(*)
         FROM NewTimeAttendance
         WHERE NewTimeAttendance.EmployeeID = NewEmployee.EmployeeId
             /* include condition for employee in attendance */
             AND TotalTime IS NULL
             AND (Note = '' or Note IS NULL)
             AND Month BETWEEN 1 AND 3) AS AttendDays,
        (SELECT COUNT(*)
         FROM NewTimeAttendance
         WHERE NewTimeAttendance.EmployeeID = NewEmployee.EmployeeId
             /* include condition for employee absent */
             AND TotalTime IS NULL
             AND (Note = '' or Note IS NULL)
             AND Month BETWEEN 1 AND 3) AS AbsentDays
    FROM NewEmployee
    ORDER BY EmployeeID
    

    【讨论】:

    • wooow..你理解我..谢谢你..还有很好的编码..谢谢你......你知道......我在考虑两个选择,但我使用了别名。 . 你很聪明....谢谢
    【解决方案2】:

    第一个查询由于 ON 子句中的一堆错误而引发语法错误。也就是说:

    1. empabsent =NewEmployee.EmployeeID = NewTimeAttendance.EmployeeID 
    2. and (month=1 or month =2 or month = 3) , attenddays = NewTimeAttendance.EmployeeID 
    

    在第二个查询中,AttendDaysAbsentDays 应该是用户定义的函数吗?如果是的话,我无法想象这种语法在任何 SQL 方言中都有效。

    您到底想达到什么目的?你要数什么?您能否提供两条不同的 SQL 语句,分别为您提供所需的计数,然后我们可以尝试将它们组合起来?

    编辑鉴于新信息,您应该能够在单个查询中执行此操作:

    SELECT EmployeeId, EmployeeName
        , Sum(Case When NewTimeAttendence.TotalTime Is Null Then 1 Else 0 End) As AttendDays
        , Sum(Case When NewTimeAttendence.TotalTime Is Not Null Then 1 Else 0 End) As AbsentDays
    FROM NewEmployee
        Join NewTimeAttendence
            On NewTimeAttendence.EmployeeId = NewEmployee.EmployeeeId
    Where (NewTimeAttendence.Note = '' Or NewTimeAttendence.Note Is Null)
        And Month In(1,2,3)
    Group By EmployeeId, EmployeeName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-27
      • 2013-08-14
      • 2016-06-21
      • 2015-07-24
      • 2022-11-21
      • 1970-01-01
      • 2012-08-03
      • 2022-11-11
      相关资源
      最近更新 更多