where 절의 제약 조건에 관해 다른 질문이 있습니다. 여기 내 코드입니다 :SQL 설정 제약 Where 절에서 무엇을해야할지 모르겠습니다.
use db.random123
go
create view dbo.increasebasedonvar
as
select *
from dbo.incbasedondate as ibd
where ibd.[avg rent var] < 30 and
([avg rent var] between 15 and 30 and datediff(month,ibd.leasedate, '2016-09-01') > 24)
go
여기 내 목표는 [평균 VAR 임대] 레코드를 제외하는 것입니다> = 30이며, [평균 VAR 임대]하는 경우 (포함) (15)와 사이에 기록의 일부를 제외 30 그리고 '리스 이용자'와 미래의 날짜 사이의 시간은 24 개월 미만입니다. 그런 다음이 매개 변수로 제외되지 않은 나머지 레코드를 모두 반환하려고합니다.
불행히도 나는 이것을 어떻게 성취 할 수 있는지 완전히 확신 할 수는 없지만 if 문을 조합하려고 시도했지만 적절하게 작동하지 않는 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다.
편집 ------------------------------------------
그래서 select 쿼리에서 도우미 열을 만들어 다른 경로를 시도하기로 결정했습니다. 이것은 내가 지금 가지고있는 것입니다.
use Random
go
create view dbo.incbasedondate
as
select
riv.unitcode,
riv.lcode,
riv.sitename,
riv.ledgerid,
riv.unitname,
riv.tenantid,
riv.sfname,
riv.slname,
riv.scompany,
riv.stdrate,
riv.rent,
riv.[std rate variance],
riv.[average rent],
riv.[avg rent var],
**case
when riv.[avg rent var] not between 15 and 30
then 1
else
case
when (riv.[avg rent var] between 15 and 30) and datediff(month,riv.leasedate, '2016-09-01') > 24
then '15-30 inc'
else null
end
end as [15-30 Increase],**
riv.leasedate,
riv.rentlastchanged,
riv.[Days Same],
riv.[Days Same Form],
riv.paidthrudate,
riv.schedrent,
riv.schedrentstart,
riv.tenzip,
riv.sitezip
from dbo.rentincreaseview as riv
where
([days same form] <= 9 and
datediff(month, leasedate,'2016-09-01') >= 8)
or([days same form] >9 and
datediff(month, rentlastchanged,'2016-09-01') >= 12)
go
drop view dbo.FinalIncDataSet
use Random
go
create view dbo.FinalIncDataSet
as
**select *
from dbo.incbasedondate as ibd
where ibd.[avg rent var] < 30 and ibd.[15-30 Increase] is not null
order by ibd.unitcode**
go
이이 문제에 대한 핵심 부품 인 :
case
when riv.[avg rent var] not between 15 and 30
then 1
else
case
when (riv.[avg rent var] between 15 and 30) and datediff(month,riv.leasedate, '2016-09-01') > 24
then '15-30 inc'
else null
end
end as [15-30 Increase],**
**select *
from dbo.incbasedondate as ibd
where ibd.[avg rent var] < 30 and ibd.[15-30 Increase] is not null
order by ibd.unitcode**
그리고 거의 모든이 제거되고처럼 지금 내 결과가 더 잘못, 그것은 보인다. 성명서 작성시 중첩 된 케이스에 문제가 있습니까?
이론 상으로는 임대 날짜와 미래 날짜 사이의 시간이 24 개월 미만인 경우 [avg rent var]가 15에서 30 사이 인 레코드를 제외하는 IF 문을 작성하려고했습니다. 그러나 내가 그 반대일지도 모르는 것처럼 보입니다. 나는 사용할 올바른 구문에 매달렸다. – sccrbrg
만약 내가 그것을 바꿀 수 없다면 15에서 30 사이의 모든 기록을 제외시키지 않겠습니까? 시차가 24 개월 이상인 경우 15 세에서 30 세 사이의 기록을 포함하고 싶습니다. – sccrbrg
방금 전에 작성한 의견을 바탕으로 답변을 수정했습니다. 그에 따라 코드를 변경하고 체크 아웃 할 수 있습니다. –