1

助けてください!!私は SQL プログラミングの初心者であり、すべてを独学で学んでいます。私はついに取り組むことができないように見える問題に遭遇しました。うまくいけば、誰かが助けてくれるでしょう。次のテーブルがあります。私がする必要があるのは、FROISEDI で RECDATE を使用し、WEI4CPP でその日付より前のすべての個別の日付 (I4C7DZ) をカウントすることです。以下のコードを使用しましたが、同じ CACLAIM 値を持つレコードが作成されるまでは機能しているようです。また、2 つのレコードの CACLAIM と DOI が同じであるため、コードが機能しない場合もあります。どういうわけか、FROISEDI の AGCLAIM を使用する必要がありますが、それをカウント テーブルに取り込む方法がわかりません。ああ、私は SAS を使用しているので、正確には 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  

私が使用したコード:

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;
4

3 に答える 3

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
于 2009-06-18T19:27:02.693 に答える
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に属しているかを解決するためのビジネスルールはわかりません。記入されていて一致しない場合は拒否できますが、そうでない場合は、日付に関連する情報やその他の情報が必要になります。

于 2009-06-23T19:28:05.197 に答える
0

ロジックを詳しく調べていませんが、両方の日付が数値として保存されていることを確認してください。日付が char として保存されているのを複数回見たので、GT と LT はあなたが思うように機能しません。

于 2009-06-19T13:01:00.850 に答える