PIVOT表制作列动态

时间:2016-04-19 10:10:56

标签: php mysql database

我知道这可能是之前提出过的一个问题。

但我是我自己不确定我是否以正确的方式这样做,所以我不得不问。

我想在输出

中的下表
EmpID   Name          Desig     Year       Q1       Q2      Q3       Annual 
---------------------------------------------------------------------------------
1       Haider          0       2016      setup    setup    setup     AnotherString
2       Arif            1       2016      setup    setup    setup     AnotherString

但我在db中的表是。

员工表:

EmpID   Name          Desig 
-------------------------------
1       Haider          0   
2       Arif            1

评估表

ID      Title    
-----------------
1       Q1  
2       Q2
3       Q3
4       Annual      

评估表中的值是输出表(第一个表)中的列。

我不明白我怎么能用枢轴来做到这一点。我见过例子,但不知道如何设置这样的表格。

Plus表中没有年份信息。今年将针对每位员工显示当年。

这是我试图解决的问题。但我不知道如何将其加入其他表格,那里没有任何员工信息。

SELECT 
  * 
FROM
  employee E 

  INNER JOIN employment ET 
    ON ET.`employee_id` = E.`employee_id` 
    AND ET.`trashed` = 0
    AND ET.`current` = 1



WHERE E.`enrolled` = 1 
  AND E.`trashed` = 0 
  AND E.`employee_id` IN (8,1,3,17,6,19,23)

== - == - = - == - == - = -

更新

这是我到目前为止所尝试的内容。但是当我跑它时,我没有桌子?

  SET @sql = NULL;

SELECT GROUP_CONCAT(DISTINCT AppraisalTitle) INTO @sql
FROM `ml_appraisal_title`
WHERE Trash = 0;

  SET @sql = CONCAT('SELECT E.employee_id
                    , E.full_name AS Name, ', @sql, ' 
                   FROM employee E
                   LEFT JOIN ml_appraisal_title AS MLPT 
                    ON MLPT.ID = E.employee_id
                   GROUP BY E.employee_id');

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

我不太了解它。但我一直试图弄明白。

= - = - = - = - = - = - = - = - =

更新:2

我想我到达了这个地方。的xD ..

 SET @sql = NULL;

SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(AppraisalTitle=''',AppraisalTitle,''', AppraisalTitle, NULL)) AS ',AppraisalTitle )) INTO @sql
FROM `ml_appraisal_title`
WHERE Trash = 0;

  SET @sql = CONCAT('SELECT E.employee_id
                    , E.full_name AS Name, ', @sql, ' 
                   FROM employee E
                   LEFT JOIN ml_appraisal_title AS MLPT 
                    ON MLPT.AppraisalID = E.employee_id
                   GROUP BY E.employee_id');

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

我的结果低于上述查询结果。 enter image description here

但是这个东西是列中的值需要来自另一个表。困惑我怎么能这样做。正如您在输出中看到的那样,setup将充当链接。并且可以根据另一个表将其更改为任何其他值。

评估通知表

ID      Notification
-----------------
1       setup
2       Create
3       Complete

如何从另一张桌子显示设置? 我能理解我需要加入它.. 但我在想,如果我可以使用左连接,如果值为null,则应显示设置。有可能吗?

0 个答案:

没有答案