【发布时间】:2015-08-25 17:40:20
【问题描述】:
我需要关于 select 子句中的子查询的帮助。我有表:EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, EMPLOYEE_GROUP) 和 ACTIVITIES (ACTIVITY_DATE, ACTIVITY_STATUS, EMPLOYEE_ID)。我需要为“W”组的员工选择一些活动。
很遗憾,我不能使用 CREATE TABLE/VIEW 功能,所以我尝试了这个,但它不起作用。
SELECT DISTINCT
TB1.EMPLOYEE_NAME,
(SELECT TB1.ACTIVITY_DATE FROM TB1
WHERE TB1.ACTIVITY_STATUS = 'START' AND TB1.ACTIVITY_NUMBER = 1) AS FIRST_START,
(SELECT TB1.ACTIVITY_DATE FROM TB1
WHERE TB1.ACTIVITY_STATUS = 'START' AND TB1.ACTIVITY_NUMBER = 2) AS SECOND_START,
(SELECT TB1.ACTIVITY_DATE FROM TB1
WHERE TB1.ACTIVITY_STATUS = 'STOP' AND TB1.ACTIVITY_NUMBER = 1) AS FIRST_STOP,
(SELECT TB1.ACTIVITY_DATE FROM TB1
WHERE TB1.ACTIVITY_STATUS = 'STOP' AND TB1.ACTIVITY_NUMBER = 2) AS SECOND_STOP
FROM(
SELECT DISTINCT
A.EMPLOYEE_NAME,
B.ACTIVITY_DATE,
B.ACTIVITY_STATUS,
ROW_NUMBER() OVER (PARTITION BY A.EMPLOYEE_NAME,B.ACTIVITY_STATUS
ORDER BY B.ACTIVITY_DATE ASC) ACTIVITY_NUMBER
FROM
(SELECT * FROM EMPLOYEES WHERE EMPLOYEE_GROUP ='W') A
LEFT JOIN ( SELECT * FROM ACTIVITIES WHERE ACTIVITY_STATUS IN ('START','STOP','PAUSE') )B
ON A.EMPLOYEE_ID = B.EMPLOYEE_ID
) TB1
你知道任何函数,我可以用它从带有别名的表中选择数据吗?
【问题讨论】:
-
你试过CTE(公用表表达式)吗??
-
公用表表达式在 Oracle 文档中称为子查询因式分解。至少这是我最后一次阅读 Oracle 文档。