0

値が一致していることを確認するために比較する必要がある 2 つのテーブルがあります。文脈上、1 つは従業員のタイムシートで、もう 1 つは従業員の要求を保持するテーブルです。それぞれにタイムシートコードと時間数があります。私の計画は、それらが一致するかどうかを要約して比較することでした。ただし、毎回ロジックを完全に機能させるのに問題があります。私が自分のコードを投稿しなければ (とにかくすぐにめちゃくちゃになってしまいます)、どのようにアプローチしますか? 比較はプログラムで実行できる必要があり、最終的に true/false を返します。

これは、RPG ソリューションまたは SQL ソリューションです。

これが真実であることを確認する必要があります。

Table 1
02  1.5
04  16.0

Table 2
02  1.5
04  16.0

問題はいつ

Table 1
02  1.5

Table 2
02  1.5
04  16.0

またはいつ

Table 1
02  1.5
04  16.0

Table 2
02  1.5

またはそれ以上の場合

Table 1
02  1.5
04  16.0

Table 2
4

6 に答える 6

1

これにより、各ID値のAとBの合計時間が比較され、Bの合計がAと等しくないレコードのみが返されます。Bの一致しない値はゼロとして扱われます。

SELECT A.id, A.hours, SUM(COALESCE(B.Hours,0))
FROM A
LEFT OUTER JOIN B
  ON B.ID = A.ID
WHERE 1=1
  AND A.id = B.id
GROUP BY A.id
HAVING A.Hours != SUM(COALESCE(B.Hours,0))

Cheers,
Daniel
于 2011-03-09T21:52:01.517 に答える
0

最も単純な解決策は、競合している行を示しています。

CREATE TABLE requests ( employees_id integer, hours decimal );
CREATE TABLE hours ( employees_id integer, hours decimal );

SELECT * FROM requests, hours WHERE requests.employees_id = hours.employees_id AND requests.hours != hours.hours;

ただし、たとえば1つの2hリクエストが2つの1hマーキングと一致する必要がある場合は機能しません。

于 2011-03-09T21:57:04.460 に答える
0

私は最近このようなことをしました-ここに私のメモがあります...結果セットは、1つのテーブルに存在するが他のテーブルには存在しない値と行の違いを示しています。

ステップ 1: 比較する行を含む一時テーブルを作成します。

ステップ 2: 非集計列を一致基準として使用して、一時テーブルで FULL OUTER JOIN を実行します。

DECLARE @Ta TABLE (PubA varchar(255), CampA varchar(255), RevA money)   

INSERT INTO @Ta (PubA, CampA, RevA)                     
    SELECT Publisher, [Campaign Name], SUM([Revenue USD])               
    FROM D1.dbo.Stats               
    GROUP BY Publisher, [Campaign Name]

DECLARE @Tb TABLE (PubB varchar(255), CampB varchar(255), RevB money)   

INSERT INTO @Tb (PubB, CampB, RevB)                     
    SELECT Publisher, [Campaign Name], SUM([Revenue USD])               
    FROM D2.dbo.Stats                   
    GROUP BY Publisher, [Campaign Name]

SELECT PubA, CampA, RevA, PubB, CampB, RevB, RevA-RevB DiffRev  
FROM @Ta                        
FULL OUTER JOIN @Tb                     
ON PubA=PubB and CampA=CampB                        
ORDER BY DiffRev DESC                       
GO  
于 2011-03-09T22:22:43.123 に答える
0

一般に、2 つのテーブルをマージし、結果のテーブルの数が個々のテーブルの数と同じである場合、それらは同じ値を持つと言えます。

あなたの場合、どのように申請すればよいかわかりませんが、できるかもしれません。

于 2011-03-09T21:39:16.317 に答える
0

私は 2 つの SQL の結果をビューに入れました。その後、多くの人々からのフィードバックに基づいて、すでにこれが思いつきました。これは、独自のストアド プロシージャに作成できると思います。

SELECT SUM ( ERROR_COUNT ) AS TOTAL_ERRORS INTO NUM_ERRORS FROM (
SELECT COUNT ( * ) AS ERROR_COUNT
FROM MPRLIB . V_TSHOURSUMM A EXCEPTION JOIN MPRLIB . V_REQHOURSUMM B
ON A . EM_NUMBER = B . EM_NUMBER AND A . TIMESHEET_CODE = B . TIMESHEET_CODE AND A.HOURS_SUMMARY = B . HOURS_SUMMARY
WHERE A . EM_NUMBER = EMPLOYEE_ID OR B . EM_NUMBER = EMPLOYEE_ID
UNION
SELECT COUNT ( * ) AS ERROR_COUNT
FROM MPRLIB . V_REQHOURSUMM A EXCEPTION JOIN MPRLIB . V_TSHOURSUMM B
ON A . EM_NUMBER = B . EM_NUMBER AND A . TIMESHEET_CODE = B . TIMESHEET_CODE AND A . HOURS_SUMMARY = B . HOURS_SUMMARY
WHERE A . EM_NUMBER = EMPLOYEE_ID OR B . EM_NUMBER = EMPLOYEE_ID ) TABLE

それはうまくいくようですが、どうやら... 過剰です。考え?より良い方法はありますか?

于 2011-03-09T22:40:41.677 に答える