2016-08-04 1 views
1

보고서를 작성하는 데 문제가 있습니다. 조회 건수를 계산하려고합니다. 발급되고 전달 된 날짜/시간 필드가 모두 있습니다.카운트 2 날짜 기준 2 개 다른 열의 범위

문제점은 잘못된 결과가 나옵니다. 내가 발행 쿼리를 실행할 때이 코드를 실행

내가 223 개

SELECT COUNT(*) AS Issued FROM BPS.dbo.tbl_Profile AS p 
Inner Join BPS.dbo.tbl_Profile_Mortgage AS pm 
ON p.Id = pm.FK_ProfileId 
WHERE p.CaseTypeId IN (1,2,9,15) AND CONVERT(DATE,pm.DateAppIssued,103) BETWEEN @Start AND @End 

이 수치가 정확 그래서 난과 같이 하나 개의 쿼리에 넣어 있습니다 얻을 통과

SELECT COUNT(*) AS Passed FROM BPS.dbo.tbl_Profile AS p 
Inner Join BPS.dbo.tbl_Profile_Mortgage AS pm 
ON p.Id = pm.FK_ProfileId 
WHERE p.CaseTypeId IN (1,2,9,15) AND CONVERT(DATE,pm.DatePassed,103) BETWEEN @Start AND @End 

나에게 (126)을 제공합니다.

SELECT COUNT(pm.DateAppIssued) AS Issued,COUNT(pm.DatePassed) AS Passed FROM BPS.dbo.tbl_Profile AS p 
Inner Join BPS.dbo.tbl_Profile_Mortgage AS pm 
ON p.Id = pm.FK_ProfileId 
WHERE p.CaseTypeId IN (1,2,9,15) 
AND (CONVERT(DATE,pm.DateAppIssued,103) BETWEEN @Start AND @End 
OR CONVERT(DATE,pm.DatePassed,103) BETWEEN @Start AND @End) 

이 날 265을 발행하고 내가 여러 가지 변화를 시도 185 통과하지만 여전히 캔트 내가이 충분히 설명했다 희망 정확한 수치 는, 어떤 도움이 많이 주시면 감사하겠습니다 얻을 수 있습니다. 녹슬림

답변

2

where 절에 or 조건이 있으므로 두 가지 결과가 나타납니다. 집계 자체에서 사용하십시오. 마지막 쿼리에서 COUNT(pm.DateAppIssued) 작업을 수행 할 때

SELECT 
COUNT(case when CONVERT(DATE,pm.DateAppIssued,103) BETWEEN @Start AND @End then 1 end) AS Issued, 
COUNT(case when CONVERT(DATE,pm.DatePassed,103) BETWEEN @Start AND @End then 1 end) AS Passed 
FROM BPS.dbo.tbl_Profile AS p 
Inner Join BPS.dbo.tbl_Profile_Mortgage AS pm ON p.Id = pm.FK_ProfileId 
WHERE p.CaseTypeId IN (1,2,9,15) 
+0

VKP 덕분에 감사합니다. 그래서 기본적으로 발급 날짜가 있거나 날짜 범위가 일치하면 날짜 범위가 1로 계산됩니다. 완벽한 해결책은 where 절에서이를 달성 할 수 있다고 생각한 것입니다. 나는이 같은 코드를 가지고 있기 때문에 나중에 사용할 수 있도록이 코드를 저장하려고한다. – RustyHamster

1

, 당신이 계산하고 모든 해당 필드에 대한 값을 가지고있는 행이다. 날짜가 특정 범위에 있는지에 대한 논리가 전혀 없습니다.

실제로 행이 겹치지 않으면 (즉, 오른쪽 범위의 passed이있는 모든 행이 issued 인 행과 다르며 모든 행에 날짜가있는 경우) 실제로 거기에서 349만큼 큰 숫자를 얻습니다 (즉, 126 + 223).

솔루션 : 두 가지 별도의 쿼리를 사용하는 것이 잘못된 이유는 무엇입니까? 두 개의 서로 다른 기준에 따라 두 개의 다른 숫자가 필요하므로 별도로 선택해야합니다. 그건 나쁜 디자인이 아닙니다. 그것은 완벽하게 합리적입니다.

+0

안녕하세요 VoteyDisciple 메신저 보고서 작성기를 사용하면 쿼리 결과를 다른 쿼리에 추가하여 하나의 데이터 집합에 추가 할 수 있습니다. 두 쿼리를 모두 테이블에 추가 할 수 없습니다. – RustyHamster