The subquery pulls the value in each column for that row.
With the 'Lead' function, the value from the next row is used to create a field in the current row.
The parent query gets that data and compares the current with the next, and sets 'Chg' to '*' if they're different.
Column Item_Id Format 99 Heading Item|Id
Column Nxt_Item_Id Format 99 Heading Nxt|Item|Id
Column Lot_Id Format 999999 Heading Lot|Id
Column Nxt_Lot_Id Format 999999 Heading Nxt|Lot|Id
Column User_Nm Format A4 Heading User|Nm
Column Nxt_User_Nm Format A4 Heading Nxt|User|Nm
Column Chg Format A1 Heading C|h|g
Select Item_Id,
Nxt_Item_Id,
------------------------------------------
Lot_Id,
Case When Lot_Id <> Nxt_Lot_Id
Then '*'
Else ' '
End As
Chg,
Nxt_Lot_Id,
------------------------------------------
User_Nm,
Case When User_Nm <> Nxt_User_Nm
Then '*'
Else ' '
End As
Chg,
Nxt_User_Nm
From
(
Select Item_Id,
Lead(Item_Id) Over (Order By Item_Id)
As
Nxt_Item_Id,
----------------------------------------------
Lot_Id,
Lead(Lot_Id) Over (Order By Item_Id)
As
Nxt_Lot_Id,
-----------------------------------------------
User_Nm,
Lead(User_Nm) Over (Order By Item_Id)
As
Nxt_User_Nm
-----------------------------------------------
From AuditTbl
)
Where Nxt_Item_Id is not null;
See Oracle documentation for further detail:
Lead
Lead
No comments:
Post a Comment