У меня есть два стола, автомобиль и чтение.sql server join возвращают только одну строку из второй таблицы
АВТОМОБИЛЯ ТАБЛИЦА
VehicleIdИмяInitialReading
- ABC 584
- XYZ 900
ЧТЕНИЕ TABLE
ReadingIdДатаСдвигVehicleIdЧтение
- 2014-09-01 1 1 1234
- 2014-09-01 2 1 2230
- 2014-09-02 1 1 2500
- 2014-09-02 2 1 3004
- 2014-09-03 2 1 5000
- 2014-09-03 1 1 4000
- 2014-09-01 1 2 1000
Теперь я у меня проблема с объединением показаний. Я ищу таблицу для таблицы VehicleId
например, VehicleId=1
, то выход должен быть в следующем формате.
Date Shift OpeningReading ClosingReading
2014-09-01 1 584 1234 (if there are no opening for this date, I have to fetch the initial reading)
2014-09-01 2 1234 2230
2014-09-01 1 2230 2500
2014-09-01 2 2500 3004
2014-09-01 1 3004 4000
2014-09-01 2 4000 5000
Я попытался это с CROSS ОТНОСИТЬСЯ
create table vehicle(vehicleId int identity(1,1),name varchar(25),initialReading int);
insert into vehicle values('ABC',584),('XYZ',900);
create table reading (readingId int identity(1,1),[date] date,vehicleId int,shiftId int,reading int);
insert into reading values ('2014-09-01',1,1,1234),('2014-09-01',1,2,2230), ('2014-09-02',1,1,2500),('2014-09-02',1,2,3004),('2014-09-03',1,2,5000),('2014-09-03',1,1,4000);
SQLFiddle of the said experiment
Возможно, ваша проблема связана с крестом? http://sqlserverplanet.com/sql-2005/cross-apply-explained, когда я читаю, что мне кажется, что cross apply также (? Optional?) Создает группу, которая могла бы объяснить, почему только один результат есть (делать это как комментарий, а не ответ, поскольку я не уверен там) – Thomas
Как я уже сказал в вопросе, когда мы рассматриваем дату, мне нужно последнее введенное чтение перед этой датой в качестве начального чтения. Поэтому результат будет неправильным, если я выберу больше строки. – Sajeel