2017-12-08 1 views
0

부채 번호 당 태그 날짜가 더 많은 경우에만 내 결과에 레코드를 포함하고 싶습니다.SQL - 그룹 단위로 레코드 계산

SELECT DISTINCT 
    tag.tag_shrt_nm AS [Tag] 
    ,cnsmr.cnsmr_idntfr_agncy_id AS [Borrower Number] 
    ,CAST(cnsmr_pymnt_tag.cnsmr_pymnt_tag_assgn_dt AS Date) AS [Tag Date] 
    ,cnsmr_accnt_idntfr_agncy_id [Debt Number] 
FROM   
    cnsmr INNER JOIN 
    cnsmr_pymnt_jrnl ON cnsmr.cnsmr_id = cnsmr_pymnt_jrnl.cnsmr_id INNER JOIN 
    cnsmr_pymnt_tag ON cnsmr_pymnt_jrnl.cnsmr_pymnt_jrnl_id = cnsmr_pymnt_tag.cnsmr_pymnt_jrnl_id INNER JOIN 
    tag ON cnsmr_pymnt_tag.tag_id = tag.tag_id INNER JOIN 
    cnsmr_accnt ON cnsmr.cnsmr_id = cnsmr_accnt.cnsmr_id 
WHERE  
    tag.tag_shrt_nm IN ('tRehab') 
ORDER BY 
    cnsmr_accnt_idntfr_agncy_id 

부채 번호 당 1 개 이상의 날짜가 있으므로 여기에 원하는 출력이 표시됩니다.

Tag   Borrower Number  Tag Date  Debt Number 
tRehab  1000020234   2012-02-20  1089484 
tRehab  1000020234   2012-04-07  1089484 
tRehab  1000020234   2012-04-10  1089484 
tRehab  1000020234   2012-02-20  1089487 
tRehab  1000020234   2012-04-07  1089487 
tRehab  1000020234   2012-04-10  1089487 

태그 날짜 당 1 개의 부채 번호가 있습니다. 따라서 내가 찾고있는 것이 아니며 결과에 있어서는 안됩니다.

Tag   Borrower Number  Tag Date  Debt Number 
tRehab  1000020234   2012-02-19  1089484 
tRehab  1000020234   2012-04-07  1089485 
tRehab  1000020234   2012-04-10  1089486 
tRehab  1000020234   2012-02-20  1089487 
tRehab  1000020234   2012-04-07  1089488 
tRehab  1000020234   2012-04-10  1089489 

답변

0

EXISTS을 사용하면 날짜가 두 개인 부채 번호를 찾을 수 있습니다. 아래의 단순화 된 예를 참조하십시오.

CREATE TABLE #Test(TagDate date, DebtNumber int) 

INSERT INTO #Test(TagDate, DebtNumber) VALUES 
('01/01/2017', 1089484), 
('01/02/2017', 1089484), 
('01/01/2017', 1089485), 
('01/01/2017', 1089486), 
('01/01/2017', 1089487), 
('01/01/2017', 1089488) 

SELECT * 
FROM #Test AS O 
WHERE EXISTS (SELECT 1 FROM #Test WHERE DebtNumber = O.DebtNumber HAVING COUNT(TagDate) > 1) 

DROP TABLE #Test 
0

당신이 이미 가지고있는 것에 최소한의 수정을 필요로 당신이 시도 할 수 :

SELECT * 
FROM (SELECT DISTINCT 
     tag.tag_shrt_nm AS [Tag] 
     ,cnsmr.cnsmr_idntfr_agncy_id AS [Borrower Number] 
     ,CAST(cnsmr_pymnt_tag.cnsmr_pymnt_tag_assgn_dt AS Date) AS [Tag Date] 
     ,cnsmr_accnt_idntfr_agncy_id [Debt Number] 
     ,COUNT(cnsmr_accnt_idntfr_agncy_id) OVER(PARTITION BY cnsmr_accnt_idntfr_agncy_id ORDER BY cnsmr_accnt_idntfr_agncy_id) AS [Debt Number Count] 
     FROM   
     cnsmr INNER JOIN 
     cnsmr_pymnt_jrnl ON cnsmr.cnsmr_id = cnsmr_pymnt_jrnl.cnsmr_id INNER JOIN 
     cnsmr_pymnt_tag ON cnsmr_pymnt_jrnl.cnsmr_pymnt_jrnl_id = 
     cnsmr_pymnt_tag.cnsmr_pymnt_jrnl_id INNER JOIN 
     tag ON cnsmr_pymnt_tag.tag_id = tag.tag_id INNER JOIN 
     cnsmr_accnt ON cnsmr.cnsmr_id = cnsmr_accnt.cnsmr_id 
     WHERE  
     tag.tag_shrt_nm IN ('tRehab') 
     ORDER BY 
     cnsmr_accnt_idntfr_agncy_id) tA 
WHERE tA.[Debt Number Count] > 1 

내가 내 유일한 질문은 생각, 같은 날 두 번 이상 발생 상황이있다 같은 부채 번호에요? 예를 들어 두 개의 차용 번호가있을 수 있습니다.

0

이렇게해야합니다.

DECLARE @TabA TABLE (id INT IDENTITY(1,1), Tag VARCHAR(25), Borrower VARCHAR(25), TagDate DATE, DebtNumber VARCHAR(25)) 
INSERT INTO @TabA 
     (Tag, Borrower, TagDate, DebtNumber) 

    select 'tRehab','1000020234','2012-02-20','1089484' 
union select 'tRehab','1000020234','2012-04-07','1089484' 
union select 'tRehab','1000020234','2012-04-10','1089484' 
union select 'tRehab','1000020234','2012-02-20','1089487' 
union select 'tRehab','1000020234','2012-04-07','1089487' 
union select 'tRehab','1000020234','2012-04-10','1089487' 

DECLARE @TabB TABLE (id INT IDENTITY(1,1), Tag VARCHAR(25), Borrower VARCHAR(25), TagDate DATE, DebtNumber VARCHAR(25)) 
INSERT INTO @TabB 
     (Tag, Borrower, TagDate, DebtNumber) 

    select 'tRehab','1000020234','2012-02-19','1089484' 
union select 'tRehab','1000020234','2012-04-07','1089485' 
union select 'tRehab','1000020234','2012-04-10','1089486' 
union select 'tRehab','1000020234','2012-02-20','1089487' 
union select 'tRehab','1000020234','2012-04-07','1089488' 
union select 'tRehab','1000020234','2012-04-10','1089489' 

SELECT * FROM @TabA TA 
WHERE EXISTS (SELECT 1 FROM @TabA TA2 WHERE TA2.DebtNumber = TA.DebtNumber AND TA2.TagDate <> TA.TagDate AND TA.Id <> TA2.ID) 


SELECT * FROM @TabB TA 
WHERE EXISTS (SELECT 1 FROM @TabB TA2 WHERE TA2.DebtNumber = TA.DebtNumber AND TA2.TagDate <> TA.TagDate AND TA.Id <> TA2.ID)