我需要构建一份报告以显示每个员工(主要查询)以及每个测试的日期和/或结果,并为每个测试列分别显示一列测试。我想我的查询的结果是这样的:需要多个子查询,分别返回每个记录中的所有记录
FName LName TB Date TB Result XrayDate
--------------------------------------------------
Bob Jones 10/1/2016 P 10/1/2016
9/1/2015 P 8/1/2015
9/15/2014 N 7/1/2014
8/3/2013 N
10/1/2012 Q
9/4/2011 P
8/16/2010 P
下面是SQL我现在有,与子查询在我FROM语句,在TB日期/结果拉和XRayDate,但结果乘以一次我为XRayDate添加第二个子查询,给我21结果,而不是总共7行数据。
EMPLOYEE.FLDLNAME,
EMPLOYEE.FLDFNAME,
EMPLOYEE.FLDREC_NUM,
TUBER.FLDDATE as "TUBER Date",
TUBER.FLDCLASS as "TUBER Result",
XRayDate.FLDDATE as "XRay Date"
FROM EMPLOYEE EMPLOYEE
LEFT OUTER JOIN
(SELECT TUBER.FLDDATE, TUBER.FLDCLASS, TUBER.FLDEMPLOYEE
FROM TUBER TUBER) TUBER
ON EMPLOYEE.FLDREC_NUM = TUBER.FLDEMPLOYEE
LEFT OUTER JOIN
(SELECT PHYSLOG.FLDDATE, PHYSLOG.FLDTYPE,PHYSLOG.FLDEMPLOYEE
FROM PHYSLOG PHYSLOG
WHERE PHYSLOG.FLDTYPE = 'CXR') XrayDate
ON EMPLOYEE.FLDREC_NUM = XrayDate.FLDEMPLOYEE `EMPLOYEE.FLDLNAME
下面是使用SQL上述结果的一个样本:
Fname LName TB Date TB Result Xray Date
---------------------------------------
Bob Jones 10/1/2016 P 10/1/2016
10/1/2016 P 8/1/2015
10/1/2016 P 7/1/2014
9/1/2015 P 10/1/2016
9/1/2015 P 8/1/2015
9/1/2015 P 7/1/2014
9/15/2015 N 10/1/2016
9/15/2015 N 8/1/2015
9/15/2015 N 7/1/2014
8/3/2013 N 10/1/2016
8/3/2013 N 8/1/2015
8/3/2013 N 7/1/2014
10/1/2012 Q 10/1/2016
10/1/2012 Q 8/1/2015
10/1/2012 Q 7/1/2014
9/4/2011 P 10/1/2016
9/4/2011 P 8/1/2015
9/4/2011 P 7/1/2014
8/16/2010 P 10/1/2016
8/16/2010 P 8/1/2015
8/16/2010 P 7/1/2014
我新,以在SQL Developer中的子查询,让您的建议/反馈是受欢迎的。
在你的第二个子查询中尝试分组。 SELECT MAX(PHYSLOG.FLDDATE)FLDDATE,PHYSLOG.FLDTYPE,PHYSLOG.FLDEMPLOYEE FROM PHYSLOG PHYSLOG WHERE PHYSLOG.FLDTYPE = 'CXR' \t组由PHYSLOG.FLDTYPE,PHYSLOG.FLDEMPLOYEE – Kostya
如果上述建议没有帮助试试看看[这个问题](http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a - 非常 - 简单的SQL查询)。它解释了试图回答问题时,有用的样本数据的可能性。 –
别名的概念是为对象提供不同的名称。这通常是为了输入较少。用与表格相同的名称来替换表格只是额外的输入练习。这与提供清晰度相反。你必须看两遍才能意识到它在做什么。并且在你的子查询中不要选择你没有使用的列(你不必选择能够在连接中使用它的列)。 –