[英]Count distinct values of a Column based on Distinct values of First Column
我正在處理大量的交通數據。 我想識別改變了車道的車輛,我是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
Access不支持COUNT(DISTINCT columnname)
因此請執行以下操作:
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
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
我想你應該一一做
如果您想要更改車道的車輛,則可以執行以下操作:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.