Ich habe eine andere Frage in Bezug auf Einschränkungen in der Where-Klausel. Hier ist mein Code:SQL Einstellung Constraints In Where-Klausel, nicht sicher, was zu tun ist
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
Mein Ziel hier ist Datensätze auszuschließen, in denen die [avg mieten var] ist> = 30 und eine Teilmenge der Datensätze ausschließen, wenn die [avg var mieten] ist zwischen (einschließlich) 15 und 30 und die Zeit zwischen dem Leasingzeitpunkt und einem zukünftigen Datum beträgt weniger als 24 Monate. Dann möchte ich alle verbleibenden Datensätze, die nicht durch diese Parameter ausgeschlossen sind, zurückgeben.
Leider bin ich mir nicht ganz sicher, wie ich das erreichen kann. Ich habe versucht, eine if-Anweisung zusammenzustellen, aber das schien nicht richtig zu funktionieren. Jede Hilfe würde sehr geschätzt werden.
BEARBEITEN ------------------------------------------
Also entschied ich mich, eine andere Route zu versuchen, indem ich eine Helferspalte in der Select-Abfrage erstellte. Das habe ich jetzt.
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
Dies sind die wichtigsten Teile für dieses Problem:
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**
Und nun meine Ergebnisse sind noch falsch, es sieht aus wie fast alles eliminiert wird. Gibt es ein Problem mit meinem verschachtelten Fall bei der Anweisung?
Theoretisch versuchte ich eine IF-Anweisung zu erstellen, die Datensätze ausschließen würde, bei denen [avg rent var] zwischen 15 und 30 liegt, wenn die Zeit zwischen dem Leasingdatum und dem zukünftigen Datum weniger als 24 Monate beträgt. Aber es sieht so aus, als hätte ich das Gegenteil getan. Ich bin auf die richtige Syntax zu verwenden. – sccrbrg
Wenn ich das zu nicht ändere, schließt das nicht alle Datensätze zwischen 15 und 30 aus? Ich möchte die Datensätze zwischen 15 und 30 einfügen, solange der Zeitunterschied mehr als 24 Monate beträgt. – sccrbrg
Ich habe gerade meine Antwort basierend auf Ihrem vorherigen Kommentar überarbeitet. Sie können Ihren Code entsprechend ändern und überprüfen. –