@Jeff I felt your pain brought by the mischievous miss-mapped behavior. I spent the whole day to change the source and destination, using the data viewer. When I previewed my source, the columns are ok. But the data viewer showed shifted columns, until I saw this thread.
@Jeffrey Williams provided a few possible solutions. The second one lightened me up, i.e. stale mapping information, to refresh it, use total different query to flush it. When I put back my original query, the data viewer showed the right columns. It works like a magic!
Thank you, both of you, Jeff and Jeffrey, for brighten my day. Nothing couldn't make me happier than solving a problem. But I have to say I don't like that SSIS is so playful. Hate it!