1

请帮忙!!我是 SQL 编程的新手,并且正在自学一切。我终于遇到了一个我似乎无法解决的问题。希望有人可以提供帮助。我有以下表格。我需要做的是在 FROISEDI 中使用 RECDATE 并计算 WEI4CPP 之前并包括该日期的所有不同日期(I4C7DZ)。我使用了下面的代码,它似乎可以工作,直到我有一条具有相同 CACLAIM 值的记录。我也有两条记录具有相同 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 是 FROIISEDI.CACLAIM 链接值,而 WEI4CPP.I4YWTX 是 FROIISEDI.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

我没有详细介绍您的逻辑,但请确保两个日期都存储为数值。我不止一次看到将日期存储为字符,因此 GT 和 LT 不会按照您的想法工作。

于 2009-06-19T13:01:00.850 回答