Perhaps with a trigger, that updates the sub-identity column
to "SELECT MAX(IntField) FROM table WHERE VarCharField = ...",
plus one. Then, any that are still NULL, you set to 1.
This reproduces some but nOt all of IDENTITY behaviour.
I.E., if you delete the newest row for 'ABC', or all the
rows, the deleted number is forgotten and will be re-used.
A fuller solution uses a trigger /and/ a separate table
holding seed values fodifferent sub-identities...
If you want to delete row 1 and have the old row 2 be
row 1 nOw, a live operation of "SELECT COUNT(*)...WHERE...
AND view1.column <= view2.column" may do it - was that in the
list already offered? Anyway, you could wrap that /in/
a view, I think.