2

現在、特定の従業員と月のタイム シート エントリを返す次のクエリがあります。

SELECT supervisors.employee, 
       hourscharged.project, 
       hourscharged.chargedescription, 
       hourscharged.account, 
       hourscharged.org, 
       hourscharged.entered_hrs 
FROM   accounting 
       INNER JOIN hourscharged 
               ON hourscharged.period_no_cd = accounting.period_no_cd 
       INNER JOIN supervisors 
               ON hourscharged.employeeid = supervisors.employeenumber 
WHERE  supervisors.employee = 'JOHN' 
       AND accounting.accountingmonth = 'FEB-13' 
GROUP  BY supervisors.employee, 
          hourscharged.project, 
          hourscharged.chargedescription, 
          hourscharged.account, 
          hourscharged.org, 
          hourscharged.entered_hrs 

クエリは、次の値を持つ 7 行を返します。

従業員 | プロジェクト | プロジェクト | 料金説明 | アカウント | 組織 | ENTERED_HRS:
ジョン | 15113 | MBT アップグレード | 0510 | 1.1.10.5 | 2.00
ジョン | 15113 | MBT アップグレード | 0510 | 1.1.10.5 | 3.50
ジョン | 15113 | MBT アップグレード | 0510 | 1.1.30.4 | 2.00
ジョン | 15113 | MBT アップグレード | 0510 | 1.1.30.4 | 3.50
ジョン | 34188 | KY13 S&T | 0320 | 1.1.30.4 | 1.00
ジョン | 34188 | KY13 S&T | 0320 | 1.1.30.4 | 4.00
ジョン | 34188 | KY13 S&T | 0320 | 1.1.30.4 | 8.00

これらはタイムシート エントリです。これらの行の合計を含む一意の行を表示したい、つまり:

ジョン | 15113 | MBT アップグレード | 0510 | 1.1.10.5 | 5.50
ジョン | 15113 | MBT アップグレード | 0510 | 1.1.30.4 | 5.50
ジョン | 34188 | KY13 S&T | 0320 | 1.1.30.4 | 13.00

私は試した:

SELECT supervisors.employee, 
       hourscharged.project, 
       hourscharged.chargedescription, 
       hourscharged.account, 
       hourscharged.org, 
       Sum(hourscharged.entered_hrs) <-- * 
FROM   accounting 
       INNER JOIN hourscharged 
               ON hourscharged.period_no_cd = accounting.period_no_cd 
       INNER JOIN supervisors 
               ON hourscharged.employeeid = supervisors.employeenumber 
WHERE  supervisors.employee = 'JOHN' 
       AND accounting.accountingmonth = 'FEB-13' 
GROUP  BY supervisors.employee, 
          hourscharged.project, 
          hourscharged.chargedescription, 
          hourscharged.account, 
          hourscharged.org, 
          hourscharged.entered_hrs 

そして得た:

ジョン | 15113 | MBT アップグレード | 0510 | 1.1.10.5 | 38.50
ジョン | 15113 | MBT アップグレード | 0510 | 1.1.30.4 | 38.50
ジョン | 34188 | KY13 S&T | 0320 | 1.1.30.4 | 91.00

次のクエリ(たとえば)のため、これは非常に奇妙でした

SELECT chargedescription, 
       Sum(entered_hrs) 
FROM   hourscharged 
WHERE  employeeid = '123456' 
       AND chargedescription LIKE 'KY13 S & T' 
GROUP  BY chargedescription 

正確に合計された時間、つまり:

ジョン | 34188 | KY13 S&T | 0320 | 1.1.30.4 | 70.00

SUM でやりたいことはできますか? もしそうなら、私を導いてください。集計SUM関数の適用について広範囲に検索しましたが、それを自分の問題に適用できないようです。また、複雑なクエリで ENTERED_HRS に対して SUM を使用すると、まったく間違った合計時間が得られるのも奇妙です。SUM が機能しない場合、何が機能しますか? 適用する必要がある原則を理解できていません。このクエリが基づいているスキーマは理想的ではないかもしれませんが、レガシーであり、それを使用する必要があります。SQL Server 2005 も使用しています。ありがとうございます。

私のクエリINNER JOINは次と同等です:

SELECT supervisors.employee, 
       hourscharged.project, 
       hourscharged.chargedescription, 
       hourscharged.account, 
       hourscharged.org, 
       hourscharged.entered_hrs 
FROM   supervisors, 
       accounting, 
       hourscharged 
WHERE  supervisors.employee = 'JOHN' 
       AND hourscharged.employeeid = supervisors.employeenumber 
       AND accounting.accountingmonth = 'FEB-13' 
       AND hourscharged.period_no_cd = accounting.period_no_cd 
GROUP  BY supervisors.employee, 
          hourscharged.project, 
          hourscharged.chargedescription, 
          hourscharged.account, 
          hourscharged.org, 
          hourscharged.entered_hrs 
4

1 に答える 1

0

sum() 関数は正しく機能しています。問題を引き起こしているのは、一緒に選択している他のフィールドです。または、それはあなたのデータかもしれません。

次の 2 行で:

ジョン | 15113 | MBT アップグレード | 0510 | 1.1.10.5 | 38.50

ジョン | 15113 | MBT アップグレード | 0510 | 1.1.30.4 | 38.50

HoursCharged.Org の結果にはさまざまな値があります。何が原因なのかを調べる必要があります。

于 2013-02-20T23:37:32.990 に答える