Вашите данни са малко трудни за обработка.
За да направите обобщена таблица, колоните трябва да са уникални, дори повече, че могат да се появят и пет kis.
Доста е грозен и работи с myslq 5.7
Схема (MySQL v5.7)
СЪЗДАВАНЕ НА ТАБЛИЦА служители ( `id` INTEGER, `emp` VARCHAR(5));INSERT INTO служители (`id`, `emp`)СТОЙНОСТИ ('1', 'emp-A'), ( '2', 'emp-B'), ('3', 'emp-C'); CREATE TABLE роднини ( `id` INTEGER, `emp_id` INTEGER, `релация` VARCHAR(6), `относителна` VARCHAR( 8), `рождена дата` ДАТА); ВМЪКНЕТЕ В роднини (`id`, `emp_id`, `relation`, `роднина`, `рождена дата`) СТОЙНОСТИ ('1', '1', 'съпруг', 'съпруг- A', '1970-01-01'), ('2', '1', 'kid', 'kid-A1', '1971-01-02'), ('3', '1', ' дете', 'дете-A2', '1972-01-01'), ('4', '1', 'дете', 'дете-A3', '1973-01-01'), ('5' , '2', 'съпруг', 'съпруг-B', '1980-02-01'), ('6', '2', 'kid', 'kid-B1', '1981-02-01' ), ('7', '2', 'kid', 'kid-B2', '1982-02-01'), ('8', '3', 'kid', 'kid-C1', ' 1991-03-01'), ('9', '3', 'kid', 'kid-C2', '1992-03-01');
Заявка №1
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(случай, когато `relation` ="', `relation`, '" след това `relation` край) AS `', relation, '`', ',MAX( случай, когато `relation` ="', `relation`, '" след това `birthdate` край) AS `', 'birthdate_',relation, ''`' ) ПОРЪЧАЙТЕ ПО номер на ред ) В @sqlFROM (ИЗБЕРЕТЕ `relation` ,номер на редFROM служители e INNER JOIN (SELECT IF(`relation` ='kid',IF (@empid =`emp_id`,@rn:=@rn+1,@rn:=1),IF (@empid =`emp_id`,@ rn:=@rn,@rn:=0)) номер на ред ,IF(`връзка` ='дете',CONCAT(`връзка`,@rn),`връзка`) връзка , `роднина` , `рождена дата` ,@ empid :=`emp_id` emp_idFROM (SELECT * FROM роднини ORDER BY `emp_id`,FIELD(`relation`,"supouse","kid"),`birthdate`) rel ,(SELECT @empid :=0) a1 ,( SELECT @rn :=0) a2) r ON e.id =r.emp_id) t1;SET @sql =CONCAT("SELECT MIN(`emp`), ", @sql, " FROM (SELECT `emp_id`, `emp` , `отношение` ,номер на ред , `роднина` , `рождена дата` ОТ служители e INNER JOIN (SELECT IF(`relation` ='kid',IF (@empid =`emp_id`,@rn:=@rn+ 1,@rn:=1),IF (@empid =`emp_id`,@rn:=@rn,@rn:=0)) номер на ред ,IF(`relation` ='kid',CONCAT(`relation`, @rn),`relation`) 'relation' , `relate` , `birthdate` ,@empid :=`emp_id` 'emp_id' FROM (SELECT * FROM роднини ORDER BY `emp_id`,FIELD(`relation`,'spouse ','дете'),'рождена дата`) отн ,(SELECT @empid :=0) a1 ,(SELECT @rn :=0) a2) r ON e.id =r.emp_id) t1 GROUP BY `emp_id`");PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE ПОДГОТВЕТЕ stmt;
<предварителен код>| MIN(`emp`) | съпруг | рождена дата_съпруг | дете1 | рождена дата_kid1 | дете2 | рождена дата_kid2 | дете3 | рождена дата_дете3 || ---------- | ------ | ---------------- | ---- | -------------- | ---- | -------------- | ---- | -------------- || emp-A | съпруг | 1970-01-01 | дете1 | 1971-01-02 | дете2 | 1972-01-01 | дете3 | 1973-01-01 || emp-B | съпруг | 1980-02-01 | дете1 | 1981-02-01 | дете2 | 1982-02-01 | | || emp-C | | | дете1 | 1991-03-01 | дете2 | 1992-03-01 | | |