0

私は次のコードを持っています。私の問題は、この現在のクエリで使用した AccessLog テーブルに似た EmployeeID 列を持つ別のテーブル名 Employee から各従業員名を取得したいことです。これら2つのテーブルに参加すると、タイトルで言った奇妙なエラーが発生します。最初の SELECT の A.EmployeeID、Employee.FirstName および ; に参加するための追加コードなし。AS A INNER JOIN Employee ON A.EmployeeID= Employee.EmployeeID を最後の ORDER By 句にすると、うまくいきます。問題はネーミング/エイリアスにあると思います。私が見た同様のスレッドがありますが、それらは私の問題を解決しませんでした。誰かが私に欠点を指摘できれば、感謝します。

SELECT **A.EmployeeID,
    Employee.FirstName,**
    MonthName(Month([LogDate])) AS MonthName,
    Round((Sum(Int(DateDiff("s",'00:00:00',Duration)))/3600)) AS TotalTime
    FROM (
         SELECT AccessLog.EmployeeID, 
                AccessLog.LogDate, 
                AccessLog.TerminalID, 
                AccessLog.LogTime, 
                Format((SELECT max(LogTime) 
                        FROM AccessLog AS Alias 
                        WHERE Alias.LogTime < AccessLog.LogTime 
                        AND Alias.EmployeeID = AccessLog.EmployeeID 
                        AND Alias.LogDate = AccessLog.LogDate 
                        AND (Alias.TerminalID)<>"iGuard1A" 
                        And (Alias.TerminalID)<>"iGuard1B"  
                        AND Alias.EmployeeID = AccessLog.EmployeeID),"hh:nn:ss") AS PrevTime, 
                Format((ElapsedTime(iif(PrevTime = '',logtime,prevtime),[LogTime])),"hh:nn:ss") AS Duration, 
                AccessLog.InOut 
             FROM AccessLog 
             WHERE (((AccessLog.TerminalID)<>"iGuard1A" 
             And (AccessLog.TerminalID)<>"iGuard1B") 
             AND ((AccessLog.EmployeeID) Like "2*") 
             AND ((AccessLog.InOut)="OUT")) 
             ORDER BY AccessLog.EmployeeID, AccessLog.LogDate, AccessLog.LogTime)  
             **AS A INNER JOIN Employee ON A.EmployeeID= Employee.EmployeeID**
      GROUP BY EmployeeID, MonthName(Month([LogDate]));
4

2 に答える 2

1

可能性があると思います- それを または のいずれかGROUP BY EmployeeIdに変更してみてください。GROUP BY A.EmployeeIdGROUP BY Employee.EmployeeId

GROUP BY A.EmployeeId編集: SELECT を使用したものであるため、おそらく である必要があります。

于 2012-08-12T10:52:58.030 に答える
0

私はそれを解決しました。私が言ったように、名前/エイリアスの問題があります。すべてのサブクエリで使用される同じテーブルに別のエイリアスを与える必要がありました。その後も、一番上の選択でファーストネームの集計関数の別のエラーが表示されますが、サブクエリに含めることで解決しました。したがって、完全に私のコードは次のようになります。

SELECT C.EmployeeID, 
   (SELECT Employee.FirstName& ' ' &Employee.LastName 
      FROM Employee 
      where C.EmployeeID= Employee.EmployeeID) 
    AS FullName, 
   MonthName(Month([LogDate])) AS MonthName,
   Round((Sum(Int(DateDiff("s",'00:00:00',Duration)))/3600)) AS TotalTime
   FROM (SELECT B.EmployeeID, 
              B.LogDate, 
              B.TerminalID, 
              B.LogTime, 
              Format((SELECT max(LogTime) 
                      FROM AccessLog AS A 
                      WHERE A.LogTime < B.LogTime 
                      AND A.EmployeeID = B.EmployeeID  
                      AND A.LogDate = B.LogDate 
                      AND (A.TerminalID)<>"iGuard1A" 
                      And (A.TerminalID)<>"iGuard1B"  
                      AND A.EmployeeID = B.EmployeeID),"hh:nn:ss") AS PrevTime,  
              Format((ElapsedTime(iif(PrevTime = '',logtime,prevtime),[LogTime])),"hh:nn:ss") AS Duration, 
              B.InOut 
              FROM AccessLog As B  
              WHERE (((B.TerminalID)<>"iGuard1A" 
               And (B.TerminalID)<>"iGuard1B") 
               AND ((B.EmployeeID) Like "2*") 
               AND ((B.InOut)="OUT")) 
               ORDER BY B.EmployeeID, B.LogDate, B.LogTime)  
AS C INNER JOIN Employee ON C.EmployeeID= Employee.EmployeeID
GROUP BY C.EmployeeID, MonthName(Month([LogDate]));
于 2012-08-13T00:35:34.067 に答える