I have the following tables in a relationship I’ve tried to draw below. The
OrgChart table is a closure table to display the hierarchy of the organisation.
The Organisation is 3 Levels deep.
|--------------|
|Guidance |
|_________|
|
|
m
|-----------------| |-------------------|
|Assignment | ------m |Organisation |
|___________| ---------------------
| | |
| m m
| |------------|
| |OrgChart|
m |------------|
|--------------|
|Review |
|_________|
When a guidance is issued it is assigned to all levels of the organisation for
review. The lowest level (level 3 tier) reviews it and this is recorded in the
review table. The Level 2 tier signs off the review when all the level 3 tiers
under it has reviewed the guidance and so on. What I’d like to do is to write
a query (or series of queries) so I can list the last review of each level in
the organisation through the hierarchy.
Guidance ref_num| Date last reviewed| Dept Name
100 | 5/5/16 | Dept A
100 | 1/4/16 | Dept AA
100 | 1/3/16 | Dept AAA
100 | 5/5/16 | Dept A
100 | 1/2/16 | Dept AA2
100 | 3/3/16 | Dept AAA2
Etc.
The idea is to later scan the table to produce a report as below
Ref_num | Level1 _ Dept | level 1_Review | Level2_Dept | Level2_Review |
Level3_Dept | Level3_Review
100 | Dept A | 5/5/16 |Dept AA
|1/4/16 | Dept AAA |1/3/16
100 | Dept A | 5/5/16 |Dept AA2
|1/2/16 | Dept AAA2 |3/3/16
I'd be grateful for any help. Here is the full definition of the tables:
CREATE TABLE ASSIGNMENT (
ASSID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
VERID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
ORGID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
ASSIGNED_DTE DOM_DATE NOT NULL /* DOM_DATE = DATE */,
EMPID DOM_INTLARGE /* DOM_INTLARGE = BIGINT */,
STEID DOM_INTSMALL /* DOM_INTSMALL = SMALLINT */
);
CREATE TABLE GUIDANCE (
GDLID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
VERID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
REF_NUM DOM_VARCHARSMALL NOT NULL /* DOM_VARCHARSMALL = VARCHAR(15) */,
CAPTION DOM_VARCHARLARGE NOT NULL /* DOM_VARCHARLARGE = VARCHAR(225) */,
LINK DOM_VARCHARLARGE /* DOM_VARCHARLARGE = VARCHAR(225) */,
GTYCAT DOM_INTSMALL NOT NULL /* DOM_INTSMALL = SMALLINT */
);
CREATE TABLE ORGANISATION (
ORGID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
ORG_NME DOM_VARCHARMEDIUM NOT NULL /* DOM_VARCHARMEDIUM = VARCHAR(30)
*/,
LEVEL_NUM DOM_INTSMALL NOT NULL /* DOM_INTSMALL = SMALLINT */,
PARENT DOM_INTLARGE /* DOM_INTLARGE = BIGINT */,
INUSE DOM_BOOL /* DOM_BOOL = CHAR(1) CHECK (value is NULL or (value
between 0 and 1)) */
);
CREATE TABLE ORGCHART (
OCHID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
PARENTID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
CHILDID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
DEPTH DOM_INTSMALL NOT NULL /* DOM_INTSMALL = SMALLINT */,
ORGANISATION_ORGID DOM_INTLARGE /* DOM_INTLARGE = BIGINT */
);
CREATE TABLE REVIEW (
REVID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
ASSID DOM_INTLARGE NOT NULL /* DOM_INTLARGE = BIGINT */,
REVIEW_DTE DOM_DATE NOT NULL /* DOM_DATE = DATE */,
GOTID DOM_INTSMALL NOT NULL /* DOM_INTSMALL = SMALLINT */,
NOTE BLOB SUB_TYPE 0 SEGMENT SIZE 80,
EMPID DOM_INTLARGE /* DOM_INTLARGE = BIGINT */
);