rocknbil - 4:56 pm on Sep 3, 2010 (gmt 0)
Get your head around how this works [webmasterworld.com]. Basically, while the sequence 1,5,6,7,0,0,0,0 would put all the 0's at the top, ordering by an expression allows the numbers to come to the top.
So a way that would probably work is
select * from sample_data order by SDate <> '0000-00-00' desc, ODate <> '0000-00-00' desc;
That would put all the SDates first, followed by the 0's of sdate, followed by the odates. I don't know that there's a way around it but that would set you on the road to finding it.