説明するように努めますが、不明な場合はお知らせください。英語は私の第一言語ではありません。
一連のレコードを挿入するかどうかの条件として機能するクエリについて、助けが必要です。
まず、db テーブル EmployeeProviders を取得しました。
ストアド プロシージャの 1 つで、ある条件に従ってクレジットを再計算します。この場合、レコードは 3 つの量で設定されますが、多かれ少なかれ可能性があります。
再計算後、EmployeeProviders と同じ発効日でまったく同じ数値またはクレジットを取得した場合、これらの値を挿入する必要はありません。EmployeeProviders には、有効日で区切られた各従業員のいくつかのレコード セットが含まれる場合があります。
私にとって難しいのは、レコードを 1 つずつチェックするのではなく、この場合は 3 つのセットでチェックするクエリを作成することです。レコードの 1 つが一致しない場合は、3 つすべてを挿入する必要があります。それらのすべてが同じ場合、レコードを挿入しません。
declare @StartDate datetime, @employee_id int
select @StartDate = '2013-07-01', @employee_id = 3465
たとえば、値が入力された db テーブルを次に示します。
DECLARE @EmployeeProviders TABLE (
ident_id int IDENTITY,
employee_id int,
id int,
plan_id int,
credits decimal(18,5),
effective_date datetime
)
INSERT INTO @EmployeeProviders (employee_id, plan_id, id, credits, effective_date)
VALUES (18753, 23, 0.00000, '2013-06-01')
INSERT INTO @EmployeeProviders (employee_id, plan_id, id, credits, effective_date)
VALUES (3465, 18753, 15, 0.00000, '2013-06-01')
INSERT INTO @EmployeeProviders (employee_id, plan_id, id, credits, effective_date)
VALUES (3465, 18753, 16, 60.00, '2013-06-01')
INSERT INTO @EmployeeProviders (employee_id, plan_id, id, credits, effective_date)
VALUES (3465, 18753, 23, 0.00000, '2013-07-01')
INSERT INTO @EmployeeProviders (employee_id, plan_id, id, credits, effective_date)
VALUES (3465, 18753, 15, 0.00000, '2013-07-01')
INSERT INTO @EmployeeProviders (employee_id, plan_id, id, credits, effective_date)
VALUES (3465, 18753, 16, 81.580, '2013-07-01')
SELECT * FROM @EmployeeProviders WHERE plan_id = 18753 and datediff(dd,effective_date,@StartDate) = 0
ストアド プロシージャの一時テーブルを次に示します。計算プロセス中に更新されます
DECLARE @Providers TABLE (
id int,
plan_id int,
credits decimal(18,5)
)
INSERT INTO @Providers (plan_id, id, credits)
VALUES (18753, 23, 0.00000)
INSERT INTO @Providers (plan_id, id, credits)
VALUES (18753, 15, 0.00000)
INSERT INTO @Providers (plan_id, id, credits)
VALUES (18753, 16, 81.580)
SELECT * FROM @Providers
この一時テーブルのすべての更新量は db テーブルの EmployeeProviders と同じなので、新しいレコード セットを挿入する必要はありませんEmployeeProviders ()... SELECT ... FROM @Providers ,,, -- 値が EmployeeProviders と同じでない場合に 3 つのレコードのセットを返すクエリ
別のシナリオでは、@Providers.credits = 65 です。これは、id = 16 の EmployeeProviders.credits と比較して金額が変更されているためです。新しい 3 つのレコードのセットを EmployeeProvider テーブルに追加します。
DECLARE @Providers TABLE (
id int,
plan_id int,
credits decimal(18,5)
)
INSERT INTO @Providers (plan_id, id, credits)
VALUES (18753, 23, 0.00000)
INSERT INTO @Providers (plan_id, id, credits)
VALUES (18753, 15, 0.00000)
INSERT INTO @Providers (plan_id, id, credits)
VALUES (18753, 16, 65.00)
SELECT * FROM @Providers
前もって感謝します、
マック