Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于相同的行值查找值_Sql_Ms Access - Fatal编程技术网

Sql 基于相同的行值查找值

Sql 基于相同的行值查找值,sql,ms-access,Sql,Ms Access,我有一个数据库,其中有一个表(tblPersonnel),其中填充了以下数据 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

我有一个数据库,其中有一个表(
tblPersonnel
),其中填充了以下数据

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
我需要查询所有人员在“上升”和“下降”时间之间的总时间。 我想要这样的输出

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\u人员
vesselname
sailoutdate
始终具有“向上”和“向下”值。所以这些可以用来搜索匹配的行


我如何才能做到这一点?

您可以使用条件聚合。挑战在于总时间。如果你能忍受总分钟数,那就很容易了:

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;
谢谢, 两个答案都很好,尽管我看到了不同的输出,因为并不是所有的数据都完全正确填写

我最后的疑问是这样的

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]));

你试过什么吗?你被困在哪里?