Sono nuovo qui nel sito e ho bisogno di un aiuto da voi ragazzi. Di seguito è lo schema che ho che può essere eseguito in questo sito http://sqlfiddle.com/#!3/134c3. Il nome del mio database è ispezioni del veicolo. La mia domanda è dopo questo schema.Condizione SQL IF da altre tabelle
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')
Per chiarire le cose. Ci sono due condizioni quando emettiamo il ticket per il driver.
Quando il veicolo viene ispezionato e rilevato difetti su qualsiasi articolo di Classe A o B (spuntare 'sì'). Lo stato del ticket è OPEN. D'altra parte, se tutti gli articoli di Classe A e B sono spuntati "No", significa che non si riscontrano difetti. Lo stato del ticket è CHIUSO. Infine gli articoli di Classe C o (violazioni del codice stradale) sono spuntati N/A. Si tratta di una semplice ispezione del veicolo
La condizione n. 2 è il luogo in cui il veicolo viene fermato a causa di violazioni del codice stradale (ad esempio, eccesso di velocità). Il veicolo NON sarà ispezionato, La distinzione di questo biglietto emesso è che tutti gli articoli di Classe A e B sono spuntati o segnano "N/A" mentre sulla Classe C è spuntato "sì" o "no".
ora ho questo codice SQL in basso che può essere utilizzato nello schema sopra dove si estrarrà i veicoli sulla sua MAX(EventTime)
con corrispondenti Stato del Ticket.
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
Risultato:
RESULT: PlateNo - 8112AG ; EventTime - July 2, 2013; TicketStatus - Close.
QUESTO NON È IL CORRETTO poiché in questa data particolare ci sono stati nessuna ispezione a tutti solo il driver è stato catturato per superamento di velocità (vedi lo schema sopra) e articoli in classe A e B sono contrassegnati N/A.
Il risultato corretto dovrebbe essere un passo indietro che è il 1 luglio 2013 e lo stato del biglietto è APERTO poiché era un'ispezione chiara. Gli articoli di categoria A e B sono ispezionati e trovati PNEUMATICI sono difettosi e il SISTEMA DI FRENATURA NON ha difetti.
In qualche modo stavo pensando al codice dove Event.TicketStatus = CLOSE esaminerà se è chiuso perché è stato ispezionato o chiuso perché è una violazione del traffico.
È possibile utilizzare '* italic *' o '** bold **' per enfatizzare le parole. – GolezTrol
Domanda ben formata per un principiante ... – ganders
Hai bisogno di cambiare la tua clausola where per verificare dove [index] = 2? – ganders