Reputation: 13
I have run into an issue,
the table is partitioned by col2 by values, BB and CC, and the have their respective status in col3, what i want is to apply a flag for every row in col2, e.g if any or all rows in col2 has status 'ST_Inprogress' or 'ST_Approved' then flag for all the rows in col2 should be 'Y' else it should be 'N' like given table in the attached picture
Could someone please help.
Upvotes: 0
Views: 1827
Reputation: 164069
With MAX()
window function:
select *,
max(case when Col3 in ('ST_Inprogress', 'ST_Approved') then 'Y' else 'N' end) over (partition by Col2) flag
from tablename
See the demo for Postgresql and for SQL Server.
Results:
| Col1 | Col2 | Col3 | flag |
| ---- | ---- | ----------- | ---- |
| AA | BB | ST_Closed | N |
| AA | BB | ST_Closed | N |
| AA | BB | ST_Deleted | N |
| AA | BB | ST_Closed | N |
| AA | BB | ST_Deleted | N |
| AA | BB | ST_Deleted | N |
| AA | BB | ST_Deleted | N |
| AA | BB | ST_Deleted | N |
| AA | BB | ST_Deleted | N |
| AA | BB | ST_Deleted | N |
| AA | BB | ST_Deleted | N |
| AA | BB | ST_Deleted | N |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Approved | Y |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Deleted | Y |
| AA | CC | ST_Approved | Y |
Upvotes: 1