2016-01-22 102 views
1

我有以下查询:女士访问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”具有相同的编号为Ex S01,F01的匹配“F”。我需要访问距离它的每个“F”和减去“S”距离的距离字段。

例如,F01的距离为73.10,S01的距离为60.80,因此它们之间的距离为12.3。我需要为每个记录做这个,在“S”和“F”可以变得非常高而且总是匹配之后,它们的数字就会被记录下来。恩。 S999 - F999

+0

该表是否仅包含'InspectionID'和'Continuous'的唯一组合? – HansUp

+0

@HansUp我不是100%确定你的问题,但连续“S01”的检查ID“262”不会重复。下一个是“262”的“S02”。注意:连续可以是NULL,但不适用。 –

回答

1

使用Mid()功能,从您的Continuous字段中提取数字:Mid("S01", 2)得到 “01”。然后在加入FS行时使用这些数字。

使用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查询设计器会抱怨它无法表示设计视图中的连接条件。如果您在SQL查看中设置了联接,则可以在没有Access抱怨的情况下运行该查询。

+0

谢谢!你知道是否可以同时显示SQL查询视图和数据视图? –

+0

对不起,我不明白...查询不能同时显示在* SQL视图*和*数据表视图*中。 – 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

我收到错误:表达式中未定义的函数“substring” –