2016-03-22 26 views
0

Aşağıdaki verilerle doldurulmuş bir tabloya (tblPersonnel) sahip bir veritabanım var.Aynı satır değerlerine göre değer bulun

Name_Personnel  VesselName SailoutDate Time_transfer Direction 
JB     Flight 2 3/03/2016 10:38:00  UP 
MH     Flight 2 3/03/2016 10:38:00  UP 
RS     Flight 2 3/03/2016 10:38:00  UP 
JB     Flight 2 3/03/2016 11:40:00  DOWN 
MH     Flight 2 3/03/2016 11:40:00  DOWN 
RS     Flight 2 3/03/2016 11:40:00  DOWN 

Tüm personelin "YUKARI" ve "AŞAĞI" zamanları arasındaki toplam süreyi sorgulamam gerekir. Böyle bir çıktı ile gelmek istiyorum.

Name_Personnel  VesselName SailoutDate Time_transfer_UP Time_transfer_DOWN Total_time 
JB     Flight 2 3/03/2016 10:38:00   11:40:00   01:02 
MH     Flight 2 3/03/2016 10:14:00   11:49:00   01:35 
RS     Flight 2 3/03/2016 10:36:00   11:53:00   01:17 

Name_personnel, vesselname ve sailoutdate daima "YUKARI" ve "Aşağı" değeri vardır. Böylece bunlar eşleşen satırları aramak için kullanılabilir.

Bunu nasıl yapabilirim?

+0

Nerede kaldın? –

cevap

0

Koşullu kümelemeyi kullanabilirsiniz. Zorluk toplam zamandır. Eğer toplam dakika ile yaşayabilir, o zaman oldukça kolaydır: tüm veriler tamamen doğru doluydu değil gibi ben farklı çıktı gördüğümüz halde

select Name_Personnel, VesselName, SailoutDate, 
     max(iif(direction = 'UP', time_transfer, NULL)) as time_transfer_up, 
     max(iif(direction = 'DOWN', time_transfer, NULL)) as time_transfer_down, 
     datediff("minute", 
       max(iif(direction = 'UP', time_transfer, NULL)) 
       max(iif(direction = 'DOWN', time_transfer, NULL)) 
       ) as minutes_diff 
from tblPersonnel 
group by Name_Personnel, VesselName, SailoutDate; 
0

sayesinde İkisi cevaplar, iyi çalıştı.

Son sorgum bu oldu.

SELECT DateDiff("n",Max(IIf([direction]='UP',[time_transfer],Null)),Max(IIf([direction]='DOWN',[time_transfer],Null))) AS minutes_diff, tblPersons.Name_Personnel, tblPersons.VesselName, tblPersons.SailoutDate, tblPersons.Type, tblPersons.VesselName, Max(IIf([direction]='up',[time_transfer],Null)) AS Time_transfer_UP, Max(IIf([direction]='Down',[time_transfer],Null)) AS Time_tranfer_DOWN 
FROM tblPersons, QRY_Numberofsailingdays 
GROUP BY tblPersons.Name_Personnel, tblPersons.SailoutDate, tblPersons.Type, tblPersons.VesselName, tblPersons.VesselName 
HAVING (((tblPersons.SailoutDate) Between [Forms]![FRM_Working_Time_Personnel]![TXT_startdate] And [Forms]![FRM_Working_Time_Personnel]![TXT_enddate])); 
İlgili konular