我是新來的網站,我需要你們的幫助。以下是我可以在本網站運行的模式http://sqlfiddle.com/#!3/134c3。我的數據庫的名稱是車輛檢查。我的問題是在這個模式之後。來自其他表的SQL IF條件
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')
澄清事情。我們向駕駛員發放車票時有兩種情況。
當檢查車輛並發現A類或B類的任何物品有缺陷時(勾選「是」)。該票的狀態是OPEN。另一方面,如果A類和B類的所有項目都勾選「否」,則表示沒有發現缺陷。票狀態爲CLOSE。最後,C類或(交通違章)項下的項目打勾N/A。這意味着它僅僅是一個車輛檢查
條件2是車輛由於交通違規(例如過度加速)而停車的地方。車輛將不會被檢查,這張簽發票的區別是所有屬於A類和B類的項目都打勾或標記爲「不適用」,而C類則打勾爲「是」或「否」。
現在我有下面這SQL代碼可以在模式上面使用它會提取車輛在其MAX(EventTime)
與相應的查詢狀態。
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
結果:
RESULT: PlateNo - 8112AG ; EventTime - July 2, 2013; TicketStatus - Close.
,因爲在這個特別的日子沒有檢查都只有司機被抓的超速(參見上面的架構)和項目下的類這是不是正確的A和B標記爲N/A。
正確的結果應該是退後一步,即2013年7月1日,並且票據狀態是開放的,因爲它是一個明確的檢查。 A類和B類下的物品被檢查並發現TIRES有缺陷,制動系統沒有缺陷。
不知怎的,我在想如果Event.TicketStatus = CLOSE,它會檢查它是否因爲檢查或關閉而關閉,因爲它違反了交通。
您可以使用'* italic *'或'** bold **'來強調單詞。 – GolezTrol
對於新手來說,這是一個很好的問題... – ganders
你是否需要更改where子句來檢查[index] = 2的位置? – ganders