2017-10-25 11 views
1

私は多少のSQL新人ですが、3つのテーブルの間にピボットを作成しようとしています。私は以下のクエリを持っており、それはMAXの呼び出しとは別に完全に動作します。それは、デフォルト値よりも小さい私の値を無効にします。私は下のテーブルのスクリーンショットを持っています。どのようにこれを修正するための任意のアイデア?MySQLの動的ピボットテーブルでは適切な結果が得られません

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
     CONCAT(
      'MAX(IF(cc.company_config_key_id = ', cck.id, ', cc.config_value, \'', cck.default, '\')) AS ', cck.company_config_key 
     ) 
    ) INTO @sql 
    FROM company_config cc 
    LEFT JOIN company_config_key cck 
    ON cck.id = cc.company_config_key_id; 
SET @sql = CONCAT('SELECT co.id, co.name, ', @sql, ' FROM companies co LEFT JOIN company_config cc ON cc.company_id = co.id GROUP BY co.id'); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 

企業:

Companies table

company_config_key:

company_config_key table

company_config:

company_config table

結果(企業1と2の二色を設定する必要があります):

query result

答えて

0

それは私がちょうど文がNULLにあれば内部を設定しなければならなかったし、その後IFNULLで最大文を包ん判明。

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
     CONCAT('IFNULL(MAX(IF(cc.company_config_key_id = ', cck.id, ', cc.config_value, NULL)), \'', cck.default, '\') AS ',cck.company_config_key) 
    ) INTO @sql 
    FROM company_config cc 
    LEFT JOIN company_config_key cck 
    ON cck.id = cc.company_config_key_id; 
SET @sql = CONCAT('SELECT co.id, co.name, ', @sql, ' FROM companies co LEFT JOIN company_config cc ON cc.company_id = co.id GROUP BY co.id'); 
SELECT @sql; 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
関連する問題