2015-08-25 2 views
0

Не совсем уверен, как сформулировать вопрос, поэтому я дал ему свое лучшее шоу и надеюсь, что объяснение поможет понять суть. Любые вопросы, пожалуйста, спросите.MYSQL поворотные строки и ограничение по строкам определенного столбца

У меня есть следующие настройки для моей базы данных:

create table spooner_pec 
(
    id int, 
    year varchar(20), 
    policy_number int, 
    primary_name varchar(200), 
    experience_rate decimal(10,2), 
    mco_name varchar(200) 
); 

с этими вставляемыми значениями:

insert into spooner_pec values 
(1,'2009',183586,'ZBIN LANDSCAPING INC', 1.22, 'GENEX CARE FOR OHIO'), 
(1,'2011',183586,'ZBIN LANDSCAPING INC', 0.93, 'COMPMANAGEMENT HEALTH SYSTEMS, INC.'), 
(1,'2012',183586,'ZBIN LANDSCAPING INC', 0.92, 'HEALTH MANAGEMENT SOLUTIONS, INC.'), 
(1,'2013',183586,'ZBIN LANDSCAPING INC', 0.50, 'CAREWORKS'), 
(1,'2014',183586,'ZBIN LANDSCAPING INC', 0.47, 'UNIVERSITY HOSPITALS COMPCARE'), 
(1,'2010',183586,'ZBIN LANDSCAPING INC', 1.27, 'SHEAKLEY UNICOMP') 

Запрос, который я работаю до сих пор это:

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'max(case when year = ', 
     year, 
     ' then experience_rate end) AS `', 
     year, '-Pen`' 
    ) ORDER BY year 
) INTO @sql 
FROM 
    spooner_pec; 
SET @sql = CONCAT('SELECT policy_number, primary_name, ', @sql, ' 
        FROM spooner_pec 
        GROUP BY policy_number'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

Итак, у меня есть одна строка для каждой компании, а затем столбцы за год. Теперь мне нужно только получить строки, в которых, например, штраф за последний год превышает 1. Так, если в прошлом году поступил на все данные были 2014, мне нужно где-Pen 2014, в этом случае,> 1.

SQLFiddle

ответ

1

ли другой запрос, чтобы получить в прошлом году, и объединить это в SQL.

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'max(case when year = ', 
     year, 
     ' then experience_rate end) AS `', 
     year, '-Pen`' 
    ) ORDER BY year 
) INTO @sql 
FROM 
    spooner_pec; 
SELECT MAX(year) INTO @lastYear FROM spooner_pec; 
SET @sql = CONCAT('SELECT policy_number, primary_name, ', @sql, ' 
        FROM spooner_pec 
        GROUP BY policy_number 
        HAVING `', @lastYear, '-Pen` > 1'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

Большое вам спасибо! –

Смежные вопросы