-1

表Aと表Bがあります

**Table A** 
Claim_ID PK

**Table B** 
Claim_State_ID
Claim_ID FK
Claim State
Claim_State_Start_Date
Claim_State_End_Date

テーブルAには多くのテーブルBを含めることができます

クレーム状態には、終了、送信済み、支払い完了の3つの値を指定できます。

クレーム状態が終了しているが、前の状態が支払い完了である必要があるテーブルA.Claim_IDで選択を行うことは可能ですか?これを行うには、開始日と終了日を確認します。

基本的に、状態が終了するクレームのみを選択する必要がありますが、これが終了して送信されない前の状態を選択する必要があります。

現時点ではデータがありませんが、これは私の論理的な試みです。

Select COUNT (Claim_ID) from TableA JOIN TableB On TableA.Claim_ID=TableB.Claim_ID Where TableB.Claim_State ="Terminated" and Claim_State_End_Date

日付をSendtoPayment状態の日付と比較する必要があるため、ここではステートメントを短くしています。

これも可能ですか?

4

3 に答える 3

1

古い結合構文を許してください。その方が好きなんです、何故か…

「請求が終了したことを示すレコードと、支払われたことを示す別のレコードがあり、終了日が支払い日よりも後のすべての請求を見つけてください」と質問していると思います。

select a.claim_ID
from   TableA a, 
       TableB term, 
       TableB paid
where  a.claim_id  =  term.claim_id
and    a.claim_id  =  paid.claim_id
and    term.Claim State  = 'TERMINATED'
and    paid.Claim State  = 'PAID'
and    term.Claim_State_Start_Date >= paid.Claim_State_Start_Date
于 2013-01-14T11:29:10.713 に答える
0

支払いが完了した請求をどこかに明示的に保存しない限り、これは不可能です。そのためには、少なくともフラグまたはまったく新しいテーブルを追加する必要があります。

于 2013-01-14T11:24:39.700 に答える
0

row_number と Common Table Expressions はあなたの友達です。

WITH cte AS
(
   select
          Claim_Id,
          Claim_State,
          Row_Number() over (Partition by Claim_Id order by Claim_State_Start_Date) as row
   from
   Table_B
)
select a.Claim_ID
from cte a inner join cte b on a.Claim_Id = b.Claim_Id and a.row = b.row + 1

where a.Claim_State = 'Terminated' and b.Claim_State = 'Paid';

これは、直前の状態が「支払い済」であることを確認し、直前の状態が「支払い済」であることをクエリに変更しselect distinct、行テストをに変更します。a.row > b.row

于 2013-01-14T13:24:49.947 に答える