I have a table with columns (Id, Prod, Id) and I must create a (Flag) like this:
x
Id Prod Id2 Flag
1 A 11 0
2 A 11 1
3 A 11 1
4 B 12 0
5 B 12 1
6 A 13 0
7 B 14 0
8 D 15 0
This (Flag) is created by grouping by (Id2) and assigning 0 for the lowest (Id) and 1 otherwise.
I tried using group by to no avail. How can I do that?
Advertisement
Answer
You can use a case
expression with a windowed function:
select tbl.*
, case
when row_number() over (partition by Id2 order by Id) = 1 then 0
else 1
end Flag
from tbl
You didn’t tag a DBMS, so I’ve gone with SQL Server, but this should work for most.