Ich habe zwei Tabellen:SQL-Abfrage Datensätze auszuschließen, wenn es einen Eintrag in einer anderen Tabelle (zB Urlaubsdaten) entspricht
Anwendung
applicationID (int)
Application (varchar)
isAvailable (Bit)
und
Urlaub
applicationID (int)
holidaydate (Datumzeit)
Ich brauche die IsAvailable Flagge für einen bestimmten Anwendungsname aber es sollte nur zurück zu bekommen, wenn der Tag, wenn kein Feiertag ist. Das isavailable Flag ist unabhängig von Feiertagen - es wird nur gesetzt, wenn es systemweite Probleme gibt, nicht nach einem festgelegten Zeitplan.
Ich hatte anfangs etwas wie:
select top 1 apps.isavailable
from dbo.Applications apps, dbo.Holidays hol
where apps.applicationid = hol.applicationid and
apps.applicationname = @appname and
((datediff(dd,getdate(),hol.holidaydate)) != 0)
aber das zurückkehrte Aufzeichnung auch wenn heute ein Feiertag war, weil die anderen Urlaubsdaten heute nicht gleich tun.
Ich versuchte
and (CONVERT(VARCHAR,getdate(),101)) not in (CONVERT(VARCHAR,hol.holidaydate,101))
(es ist auf SQL Server 2005, so dass es keine Art Datum, damit ich es konvertieren)
aber wieder, es zurückkehrt Aufzeichnungen auch wenn heute eine war Urlaub. Wie kann ich diese Abfrage mit einer "nicht in" - oder "außer" -Klausel (oder etwas anderem) strukturieren, um nur dann einen Datensatz zurückzugeben, wenn heute kein Feiertag ist?
aktualisieren
I, die keinen Urlaub haben keine Liste aller applicationnames brauchen - ich brauche für den angegebenen apps.applicationname einen Rekord. Die folgenden Antworten geben nur die Anwendungsnamen zurück, für die heute kein Feiertag vorhanden ist. Die Abfrage sollte das Isavailable-Flag zurückgeben, wenn es sich nicht um einen Feiertag handelt, oder andernfalls keine Datensätze, wenn es sich um einen Feiertag handelt. Die anderen Anwendungen interessieren mich nicht.
Auch wenn ich hinzugefügt eine Tabelle wie:
HoursOfOperations
applicationID (int)
mondayopen (Datumzeit)
mondayclose (Datumzeit)
tuesdayopen (Datumzeit)
tuesdayclose (datetime)
// öffnen und schließen für alle sieben Tage der Woche
Kann ich an allen drei dieser Tabellen teilnehmen, um nur einen Datensatz zurückzugeben, wenn es innerhalb der Stunden für den angegebenen Tag ist und kein Feiertag ist?Muss ich dies in separaten Abfragen tun?
Dies gibt alle Anwendungen, die keinen Feiertag definiert haben, aber ich brauche das Flag isavailable nur für den angegebenen apps.applicationname. Ich möchte die Liste nach der Abfrage nicht durchlaufen müssen. Was ist, wenn ich mich einer anderen Tabelle anschließen muss - ich kann die Wo und Wo nicht Klausel –
Tai nicht kombinieren - fügen Sie einfach eine zusätzliche Klausel hinzu. AND apps.AppName = 'Ihre Anwendung'. Sie können alle erforderlichen Joins hinzufügen, –
Ich aktualisierte das Beispiel für Sie, um Ihnen zu zeigen, wie Sie nach App-Name begrenzen, unter der Annahme eines Parameters von @AppName –