A plain condition splits the flow two ways: success or fail. A dynamic condition handles the cases where two isn’t enough – when a value could be one of several things and each should go its own way.
Think of a column that can be any of several categories, or a status with multiple states. You don’t want a chain of yes/no checks; you want one node that recognises each case and routes it. That’s a dynamic condition: it produces an output for each case you define.
What makes it "dynamic" is that it builds its own output sockets to match your cases – one named output per case, created as you set them up. However those sockets are named, they’re always data sockets underneath; the names are just labels so you can tell the branches apart. There’s also a default output that catches anything matching none of your cases, so no record falls through unhandled. You then wire each output to whatever that case should do.
A dynamic condition keeps multi-way logic readable: one node, several clearly labelled exits, instead of a maze of branches.
Number and count your records: Sequences