diff --git a/bin/export-pion b/bin/export-pion
new file mode 100755
index 0000000000000000000000000000000000000000..0947950c42b7949611b6624f57ad451ea6c17594
--- /dev/null
+++ b/bin/export-pion
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+# Účast ve všech soutěžích ročníku (anonymně)
+
+from dataclasses import dataclass
+from sqlalchemy.orm import joinedload
+import sys
+
+import mo.csv
+import mo.db as db
+
+sess = db.get_session()
+
+res = (sess.query(db.Participant, db.Participation)
+       .select_from(db.Participant)
+       .join(db.Participation, db.Participation.user_id == db.Participant.user_id)
+       .options(joinedload(db.Participant.user))
+       .options(joinedload(db.Participant.school_place).joinedload(db.Place.parent_place).joinedload(db.Place.parent_place).joinedload(db.Place.parent_place))
+       .options(joinedload(db.Participation.place))
+       .options(joinedload(db.Participation.contest).joinedload(db.Contest.place))
+       .options(joinedload(db.Participation.contest).joinedload(db.Contest.round))
+       .all())
+
+
+@dataclass
+class Row:
+    rocnik: str = ""
+    kategorie: str = ""
+    kolo: str = ""
+    misto: str = ""
+    kod_mista: str = ""
+    kod_ucastnika: str = ""
+    nazev_skoly: str = ""
+    kod_skoly: str = ""
+    kraj_skoly: str = ""
+
+
+output = []
+for pant, pion in res:
+    if pion.contest.round.is_subround():
+        continue
+    output.append(Row(
+        rocnik=str(pion.contest.round.year),
+        kategorie=pion.contest.round.category,
+        kolo=str(pion.contest.round.level),
+        misto=pion.contest.place.name,
+        kod_mista=str(pion.contest.place.place_id),
+        kod_ucastnika=str(pion.user_id),
+        nazev_skoly=pant.school_place.name,
+        kod_skoly=str(pant.school),
+        kraj_skoly=pant.school_place.parent_place.parent_place.parent_place.name,
+    ))
+
+output.sort(key=lambda o: (o.rocnik, o.kategorie, o.kolo, o.kod_mista, o.kod_ucastnika))
+mo.csv.write(sys.stdout, mo.csv.FileFormat.en_csv, Row, output)