Ich bin neu hier auf der Website und ich brauche eine Hilfe von euch. Unten ist das Schema, das ich habe, das auf dieser Seite http://sqlfiddle.com/#!3/134c3 ausgeführt werden kann. Der Name meiner Datenbank ist Fahrzeuginspektionen. Meine Frage ist nach diesem Schema.SQL IF Bedingung von anderen Tabellen
CREATE TABLE Car
([CarID] varchar(36),
[PlateNo] varchar(6),
[Package] int);
INSERT INTO Car([CarID], [PlateNo], [Package])
VALUES('A57D4151-BD49-4B44-AF10-000F1C298E05', '8112AG', 4);
CREATE TABLE Event
([EventID] int,
[CarID] varchar(36),
[EventTime] smalldatetime,
TicketStatus varchar (10)) ;
INSERT INTO Event([EventID], [CarID], [EventTime], TicketStatus)
VALUES (1, 'A57D4151-BD49-4B44-AF10-000F1C298E05', '20130701', 'Open'),
(2, 'A57D4151-BD49-4B44-AF10-000F1C298E05', '20130702', 'Close') ;
CREATE TABLE EventDefects
([EventDefectsID] int,
[EventID] int,
[Status] varchar(15),
[DefectID] int) ;
INSERT INTO EventDefects ([EventDefectsID], [EventID], [Status], [DefectID])
VALUES (1, 1, 'YES', 1),
(2, 1, 'NO', 2),
(3, 1, 'N/A', 3),
(4, 1, 'N/A', 4),
(5, 2, 'N/A', 1),
(6, 2, 'N/A', 2),
(7, 2, 'N/A', 5),
(8, 2, 'YES', 3),
(9, 2, 'NO', 4) ;
CREATE TABLE Defects
([DefectID] int,
[DefectsName] varchar (36),
[DefectClassID] int) ;
INSERT INTO Defects ([DefectID], [DefectsName], [DefectClassID])
VALUES (1, 'TYRE', 1),
(2, 'BRAKING SYSTEM', 1),
(3, 'OVER SPEEDING', 3),
(4, 'NOT WEARING SEATBELTS', 3),
(5, 'MIRRORS AND WINDSCREEN', 2) ;
CREATE TABLE DefectClass
([Description] varchar (15),
[DefectClassID] int) ;
INSERT INTO DefectClass ([DefectClassID], [Description])
VALUES (1, 'CATEGORY A'),
(2, 'CATEGORY B'),
(3, 'CATEGORY C')
Um Dinge zu klären. Es gibt zwei Bedingungen, wenn wir ein Ticket für den Fahrer ausgeben.
Wenn das Fahrzeug inspiziert wird und Defekte an Teilen der Klasse A oder B festgestellt wird (bitte 'Ja' ankreuzen). Der Ticketstatus davon ist OPEN. Wenn auf der anderen Seite alle Artikel der Klassen A und B mit "Nein" markiert sind, bedeutet dies, dass keine Mängel gefunden wurden. Der Ticketstatus ist SCHLIESSEN. Schließlich sind Punkte unter Klasse C oder (Verkehrsverstöße) Tick N/A. Bedeutung es ist eine reine Fahrzeuginspektion
Bedingung Nr. 2 ist, wo Fahrzeug wegen einer Verkehrsverletzung (z. B. über Geschwindigkeitsbegrenzung) gestoppt wird. Das Fahrzeug wird NICHT inspiziert. Die Unterscheidung dieses ausgestellten Tickets ist, dass alle unter den Klassen A und B befindlichen Positionen ein Häkchen oder "N/A" haben, während in der Klasse C entweder "ja" oder "nein" markiert ist.
Jetzt habe ich diesen SQL-Code unten, dass die Verwendung im Schema oben sein kann, wo sie Fahrzeuge auf seinem MAX(EventTime)
mit entsprechendem Ticket-Status extrahieren.
Select
PlateNo, TicketStatus, [EventTime]
FROM
(SELECT
ROW_NUMBER() OVER (PARTITION BY Event.CarID ORDER BY [EventTime] DESC) AS [index],
Event.CarID,
TicketStatus,
[EventTime],
plateNo
FROM
[Event]
Join
[Car] ON Event.CarID = Car.CarID) A
WHERE [index] = 1
Ergebnis:
RESULT: PlateNo - 8112AG ; EventTime - July 2, 2013; TicketStatus - Close.
DIES IST NICHT DIE RICHTIGE an diesem Datum, da es überhaupt keine Kontrolle war nur der Fahrer für Geschwindigkeitsüberschreitung (siehe Schema oben) und Artikel unter Klasse gefangen wurde A und B sind mit N/A gekennzeichnet.
Das korrekte Ergebnis sollte ein Schritt zurück sein, der 1. Juli 2013 ist und der Ticketstatus ist OPEN, da es eine klare Inspektion war. Artikel unter Kategorie A und B werden geprüft und festgestellt, dass Reifen defekt sind und das BREMSSYSTEM KEINE Mängel aufweist.
Irgendwie dachte ich Code wo, wenn Event.TicketStatus = SCHLIESSEN wird es prüfen, ob es nah ist, weil es inspiziert wurde oder schließen, weil es eine Verkehrsverletzung ist.
Sie können '* italic *' oder '** bold **' zum Hervorheben von Wörtern verwenden. – GolezTrol
Gut geformte Frage für einen Neuling ... – ganders
Müssen Sie Ihre WHERE-Klausel ändern, um zu überprüfen, wo [Index] = 2? – ganders