2016-01-22 5 views
1

У меня есть следующий запрос:Ms Access SQL расчет из нескольких строк

SELECT 
    InspectionID, Distance, Continuous, structural_grade 
FROM 
    Conditions 
WHERE 
    Continuous LIKE ("S%") OR Continuous LIKE ("F%") 
ORDER BY 
    InspectionId ASC, Distance ASC 

который выводит:

262 60.80 S01 3 
262 73.10 F01 3 
262 82.60 S02 2 
262 140.30 F02 2 
263 30.80 S01 2 
263 46.60 F01 2 
380 4.60 S01 3 
380 8.50 F01 3 
380 9.80 S02 4 
380 28.20 F02 4 
380 77.70 S03 4 
380 97.70 F03 4 

Упорядочение правильно. Однако я застрял в том, что делать дальше.

Каждый «S» имеет соответствующий «F» с одинаковыми номерами Ex S01, F01. Мне нужно получить доступ к полю «Расстояние» каждого расстояния «F» и «S» от него.

Для примеров F01 имеет расстояние 73,10 и S01 60,80, поэтому расстояние между ними составляет 12,3. Мне нужно сделать это для каждой записи и их числа после того, как «S» и «F» могут стать очень высокими, но всегда будут совпадать. ех. S999 - F999

+0

Включает ли таблица только уникальные комбинации 'InspectionID' и' Continuous'? – HansUp

+0

@HansUp Я не уверен на 100%, что ваш запрос, но непрерывный «S01» для InspectionID «262» никогда не повторится. Далее будет «S02» для «262». Примечание. Непрерывный может быть NULL, но тогда он не применяется. –

ответ

1

Используйте функцию Mid() для извлечения цифр из вашего Continuous поля: Mid("S01", 2) дает "01". Затем используйте эти цифры, когда присоединяетесь к F и S строк.

С вашими образцами данных в Access 2010, следующий запрос дал мне этот набор результатов:

enter image description here

SELECT 
    f.InspectionID, 
    f.Continuous, 
    s.Continuous, 
    f.Distance AS F_distance, 
    s.Distance AS S_distance, 
    f.Distance - s.Distance AS F_minus_S 
FROM 
    Conditions AS f 
    INNER JOIN 
     (
      SELECT 
       InspectionID, 
       Continuous, 
       Distance, 
       Mid([Continuous],2) AS digits_only 
      FROM Conditions 
      WHERE Continuous ALike 'S%' 
     ) AS s 
    ON 
      f.InspectionID = s.InspectionID 
     AND Mid(f.[Continuous],2) = s.digits_only 
WHERE f.Continuous ALike 'F%' 
ORDER BY f.InspectionId ASC, f.Distance ASC; 

Я включил несколько столбцов, которые я сомневаюсь, что вы хотите в вашем окончательном запросе. Но я думаю, что они могут быть полезны во время разработки и тестирования.

Опасайтесь, что дизайнер запросов Access будет жаловаться, что он не может представлять это условие соединения в . Дизайн View. Если вы установите соединение в SQL View, вы можете запустить запрос без доступа к жалобам.

+0

Спасибо! Знаете ли вы, если возможно одновременно показывать представление SQL-запросов и представление данных? –

+0

Извините, не уверен, что я понимаю ... запрос не может отображаться в * SQL View * и * Datasheet View * одновременно. – HansUp

+0

Это просто ужасно для развития. Я также заметил, что MS ACCESS любит переформатировать SQL в один большой текст. –

0
SELECT a.continuous AS 'S Continuous', 
a.distance AS 'S Distance', 
b.continuous AS 'F Continuous', 
b.distance AS 'F Distance', 
abs(a.distance - b.distance) AS 'Difference' 

FROM Conditions a 

INNER JOIN Conditions b 
ON a.InspectionID = b.InspectionID 
AND substring(a.continuous,2,len(a.continuous)-1) = substring(b.continuous,2,len(b.continuous)-1) 

WHERE a.Continuous LIKE 'S%' 
AND b.Continuous LIKE 'F%' 

ORDER BY a.InspectionId ASC, a.Distance ASC 
+0

Я получаю ошибку: Неопределенная функция «подстрока» в выражении –

Смежные вопросы