Ok here is a sample of one I did with a bunch of fields. Crew like the speed of it. It starts at 10 but can grow to 15. It does mean 45+ extra fields which slowed the form load down but users do not mind that.
In Connect it looks like this all written out
Then in Python I use insert cursors to split it back out into rows and all into the same table with one set of column names. Again it looks long but its easy cause you can just copy paste each Particle and change the number.
# need to do a cursor for each of the 15 particles
#Particle 1
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location1", "ParticleSize1", "NonParticleSize1"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 1, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 2
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location2", "ParticleSize2", "NonParticleSize2"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 2, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 3
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location3", "ParticleSize3", "NonParticleSize3"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 3, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 4
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location4", "ParticleSize4", "NonParticleSize4"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 4, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 5
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location5", "ParticleSize5", "NonParticleSize5"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 5, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 6
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location6", "ParticleSize6", "NonParticleSize6"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 6, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 7
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location7", "ParticleSize7", "NonParticleSize7"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 7, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 8
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location8", "ParticleSize8", "NonParticleSize8"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 8, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 9
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location9", "ParticleSize9", "NonParticleSize9"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 9, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 10
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location10", "ParticleSize10", "NonParticleSize10"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 10, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 11
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location11", "ParticleSize11", "NonParticleSize11"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 11, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 12
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location12", "ParticleSize12", "NonParticleSize12"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 12, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 13
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location13", "ParticleSize13", "NonParticleSize13"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 13, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 14
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location14", "ParticleSize14", "NonParticleSize14"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 14, row[2], row[3], row[4]))
del insertC
del searchC
#Particle 15
fieldListIn = ["DimCanPartEvaluationID", "Transect", "Location15", "ParticleSize15", "NonParticleSize15"]
searchC = arcpy.da.SearchCursor(surveyGDB + "\\" + tableList[table], fieldListIn)
fieldListOut = ["EvaluationID", "Transect", "ParticleNum", "StreambedLocation", "ParticleSize", "ParticleSizeClassNonMeas"]
insertC = arcpy.da.InsertCursor(outDB + "\\" + table, fieldListOut)
for row in searchC:
insertC.insertRow((row[0], row[1], 15, row[2], row[3], row[4]))
del insertC
del searchC
Hope that all makes sense.