It should be viewed as a single transaction and not who sent bitcoins to whom. On the left hand side you have the inputs to the transaction, and on the right hand side you have the outputs. In Bitcoin, you do not have the concept of account balance. Each output of a transaction is locked with a script and anyone who provides solution to that script can spend those bitcoins.
Here is an example. Let us assume you run a business and have few employees. Your business takes only bitcoins as a form of payment and at the end of the day you make provide daily wages to your employees. So you would have your customers sending bitcoins to your company's address when they use your product. You present a different address to your customers every time so as that you know which customer sent how many bitcoins and also to maintain privacy. Now when you are making payments to your employees at the end of the day, you do not have enough bitcoins earned from one customer so you have to aggregate a few transactions from many customers. That is an example of what you are seeing.
In a generic scenario, even if all the customers make payment to a single address, each transaction that your customer will send you will have a different txid
and output index
which you will have to provide when you are spending those bitcoins. So you will still have to provide multiple inputs to your transaction when making payments where one single customer transactions does not cover it.
EDIT: Also as @AndrewChow mentioned in his answer, even if this was a CoinJoin transaction (multiple people joining inputs so as to mask who sent to whom), it is still very difficult to determine which outputs are created by which inputs and this method is also not fullproof.