根据第一列的不同值计算一列的不同值

时间:2019-04-25 08:57:23

标签: sql ms-access

我正在处理大量的交通数据。我想识别改变了车道的车辆,我是VB.Net的Microsoft Access。

交通数据:

Vehicle_ID   Lane_ID   Frame_ID   Distance  
        1        2        12        100  
        1        2        13        103  
        1        2        14        105  
        2        1        16        130  
        2        1        17        135  
        2        2        18        136  
        3        1        19        140  
        3        2        20        141  

我试图区分Vehicle_ID,然后计数(区别Lane_ID)。 我可以列出不同的Vehicle_ID,但它会计算总Lane_ID而不是Distinct Lane_ID。

SELECT
    Distinct Vehicle_ID, count(Lane_ID)
FROM Table1
GROUP BY Vehicle_ID

显示结果:

Vehicle_ID  Lane Count  
       1    3  
       2    3  
       3    2  

正确的结果:

Vehicle_ID  Lane Count  
       1    1  
       2    2  
       3    2

此外,我想获取所有更改了车道的Vehicle_ID(所有数据,包括以前的车道和新的车道)。输出结果可能是这样的:Vehicle_ID Lane_ID Frame_ID Distance
        2 1 17 135
        2 2 18 136
        3 1 19 140
        3 2 20 141

3 个答案:

答案 0 :(得分:2)

访问不支持SELECT t.Vehicle_ID, COUNT(t.Lane_ID) AS [Lane Count] FROM ( SELECT DISTINCT Vehicle_ID, Lane_ID FROM Table1 ) AS t GROUP BY t.Vehicle_ID ,请这样做:

HAVING COUNT(t.Lane_ID) > 1

所以

  

识别改变车道的车辆

您需要添加到上述查询中:

var performance = window.performance.getEntriesByType("navigation");
if(String(performance[0].type) === "reload"){

          //do redirection.
        }

答案 1 :(得分:0)

SELECT
  Table1.Vehicle_ID,
  LANE_COUNT
FROM Table1
JOIN (
   SELECT Vehicle_ID, COUNT(*) as LANE_COUNT FROM (
      SELECT distinct Vehicle_ID, Lane_ID FROM Table1
   ) dTable1 # distinct vehicle and land id
   GROUP BY Vehicle_ID # counting the distinct
) cTable1 ON cTable1.Vehicle_ID = Table1.Vehicle_ID # join the table with the counting

我认为您应该一个接一个地做

  1. 区分车辆ID和土地ID
  2. 计算不同的组合
  3. 并将结果与​​实际表合并。

答案 2 :(得分:0)

如果您想更改车道 的车辆,则可以执行以下操作:

SELECT Vehicle_ID,
       IIF(MIN(Lane_ID) = MAX(Lane_ID), 0, 1) as change_lane_flag
FROM Table1
GROUP BY Vehicle_ID;

我认为这与计算不同车道的数量一样好,因为您没有在计算实际的“车道变化”。因此,即使车辆多次改变车道,这也将返回“ 2”:

    2        1        16        130  
    2        1        17        135  
    2        2        18        136  
    2        1        16        140  
    2        1        17        145  
    2        2        18        146