UPDATED: Try
SET @sql = NULL;
SET @month = '2014-02-01';
SELECT GROUP_CONCAT(DISTINCT CONCAT('SUM(CASE WHEN TX_NAME=''', tx_name,
''' THEN fl_amount ELSE 0 END) AS `', tx_name, '`'))
INTO @sql
FROM cmn_test_bill_x_value;
SET @sql = CONCAT('
SELECT b.KYS_ID, b.FKYS_CLIENT_ID, ', @sql, '
FROM cmn_bill b LEFT JOIN cmn_patient_bill_details bd
ON b.kys_id = bd.fkys_bill_id LEFT JOIN cmn_test_bill_type t
ON bd.fkys_bill_category=t.kys_id LEFT JOIN cmn_test_bill_x_value x
ON bd.fkys_bill_sub_category=x.kys_id
WHERE b.date >= ''', @month , '''
AND b.date < ''', @month + INTERVAL 1 MONTH - INTERVAL 1 DAY, '''
GROUP BY x.TX_NAME');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Here is SQLFiddle demo