Question

I am trying to create a cross tab query and i have written the following query.when i am running it getting an error.so please suggest me right syntax to get cross tab query.

 set @sql=null;

    select group_concat(distinct concat('sum(case when TX_NAME="',TX_NAME,
    '" then sum(FL_AMOUNT) else 0 end ) as ',TX_NAME))into @sql
     from cmn_test_bill_x_value ;
     set @sq l=con cat('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 
    group by x.TX_NAME');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEAL LOCATE PREPARE stmt;
Was it helpful?

Solution

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top