我是新来的网站,我需要你们的帮助。以下是我可以在本网站运行的模式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