2009-06-18 13 views
1

助けてください!私はSQLプログラミングにはまったく新しいものです。ついに私は取り組むことができない問題に遭遇しました。うまくいけば誰かが助けることができる。私は以下の表を持っています。私がする必要があるのは、FROISEDIのRECDATEを使用して、WEI4CPPの前に日付を含め、すべての異なる日付(I4C7DZ)を数えることです。私は下のコードを使用して、私は同じCACLAIM値を持つレコードを持っているまで動作するようです。私はまた、2つのレコードが同じCACLAIMとDOIを持っているので、私のコードはどちらもうまくいきません。どういうわけか、FROISEDIのAGCLAIMを使用する必要がありますが、Countsテーブルに引き込む方法がわかりません。ああ、私はSASを使っているので、それはまったくSQLではなく本当に近いです。助けてくれてありがとう!SQL内の相関クエリのヘルプ


TABLE: FROISEDI 
AGCLAIM RECDATE CACLAIM  DOI 
09073589 1/29/09 09 41615 1/28/09 
09115390 3/01/09 00012HR09 2/23/09 
09234567 4/20/09 003140010 1/2/09 
09154826 5/01/09 003140010 4/28/09 

TABLE: WEI4CPP 
I4C7DZ  I4X6TX  I4YWTX I4YFTX 
1/28/09    1/28/09 09 41615 
1/29/09 09073589 1/28/09 09 41615 
1/30/09 09073589 1/28/09 09 41615 
2/24/09    2/23/09 00012HR09 
2/28/09    2/23/09 00012HR09  
3/01/09 09115390 2/23/09 00012HR09 
3/15/09 09115390 2/23/09 00012HR09 
1/15/09    1/02/09 003140010 
1/20/09    1/02/09 003140010 
2/08/09    1/02/09 003140010 
3/19/09    1/02/09 003140010 
4/20/09 09234567 1/02/09 003140010 
5/01/09 09154826 4/28/09 003140010 

TABLE I NEED TO PRODUCE: COUNTS 
AGCLAIM  CACLAIM DOI  SUBMITS 
09073589 09 41615  1/28/09 2 
09115390 00012HR09 2/23/09 3 
09234567 003140010 1/02/09 5 
09154826 003140010 4/28/09 1 

私が使用したCODE:

PROC SQL; 
CREATE TABLE COUNTS AS 
SELECT I4YWTX AS DOI3, 
I4YFTX AS CLMNUM2, 
COUNT(DISTINCT I4C7DZ) AS SUBMITS 
FROM WAREHOUS.WEI4CPP A 
WHERE I4C7DZ<=(SELECT RECDATE 
     FROM FROISEDI 
     WHERE FROISEDI.CACLAIM=A.I4YFTX 
     AND FROISEDI.DOI=A.I4YWTX) 
GROUP BY WEI4CPP.I4YFTX, WEI4CPP.I4YWTX; 
QUIT; 
+0

空白のI4X6TXが09234567の直前の4行が09234567に属していることをどのように知っていますか? – longneck

+0

WEI4CPPには、私が示したものよりも多くのフィールドが含まれています。各レコードは、私たちの部門への提出に基づいており、記録内のすべてがシステムチェックによって正確になるまで、私たちはその提出を受け入れず、代理店クレーム番号(I4X6TX)を割り当てます。代理店請求番号のあるレコードは、私たちが受け入れた最初のレコードです。私はそれを受け入れる前に何回提出したかを数えようとしています。 FROISEDIは私たちが受け入れた別個の記録です。 –

+0

#@ longneckさんから質問されたことを繰り返す:I4YFTX = "003140010"のWEI4CPPの4行が、AGCLAIM = "09154826"ではなく、AGCLAIM = "09234567"に関連付けられていることをどのように知ることができますか?これらの両方のAGCLAIM値はCACLAIM = "003140010"に関連付けられているため、I4XCTX値のないWEI4CPP行がいずれかのクレームに属することを明らかにする方法はありません...また、列と表の名前はこれまでずっと読んでおられたことは間違いありません。質問を理解することは間違いありません。 –

答えて

1

はそれをテストしていません。 私は詳細にあなたのロジックを経ていないこの

SELECT 
    AGCLAIM, 
    CACLAIM,  
    DOI, T.cnt + 1 AS SUBMITS 
FROM 
    FROISEDI 
    INNER JOIN 
    (
    SELECT 
     COUNT(*) cnt, 
     I4YFTX , 
      I4YWTX  
    FROM 
     WEI4CPP 
    WHERE 
     ISNULL(I4X6TX,0) = 0 
    GROUP BY 
     I4YFTX, I4YWTX  
    ) T 
    ON FROISEDI.CACLAIM = T.I4YFTX 
+0

同じCACLAIM(別名I4YFTX)ではなく、異なるDOI(I4YWTX)を持っている上記の例の最後の2つのようなインスタンスがある場合、これは動作しますか?彼らが同じCACLAIMとDOIを持っていて、それらを区別する唯一のものがWEI4CPPのすべてのレコードにないAGCLAIMです。 –

+0

あなたは雲を追加すると思います。私はそれを確認して更新します。 – THEn

+0

質問はI4X6TXが空のときどのようにそれが属しているかを知っていますか? – THEn

0

を試みるが、両方の日付が数値として格納されていることを確認してください。私はチャットとして保存されている日付を複数回見たので、GTとLTはあなたが思うように動作しません。

0

WEI4CPP.I4YFTXはFROISEDI.CACLAIMリンク値でWEI4CPP.I4YWTXはFROISEDI.DOIのようです。これはこれほど簡単ですか?

SELECT fr.AGCLAIM, fr.CACLAIM, fr.DOI, COUNT(we.I4C7DZ) as SUBMITS 
FROM FROISEDI fr 
     INNER JOIN WEI4CPP we 
      ON we.I4YFTX = fr.CACLAIM 
      AND  we.I4YWTX = fr.DOI 
      AND  ISNULL(we.I4X6TX, fr.AGCLAIM) = fr.AGCLAIM 
WHERE we.I4C7DZ <= fr.RECDATE 
GROUP BY fr.AGCLAIM, fr.CACLAIM, fr.DOI 

注行が同じDOIとCACLAIMを持っていますが、WEI4CPP.I4X6TX列が空の場合、このに問題があるだろう。この場合、私は彼らが属するAGCLAIMを解決するためのビジネスルールを知らない。私はそれらが満たされ、一致しない場合、私はそれらを拒否することができますが、私はそうでなければそれにマッチするために日付関連または他の情報のいくつかの種類が必要になります。