0
由於我嘗試了下面的內容,但無法使其工作。 我有不同日子出席現場學生的表格。我知道它需要如下的交叉表查詢。特別是我想在Codeigniter中做到這一點。MySQL在Codeigniter中使用CrossTab將行轉換爲列
att_2_2013
| student_id| att_date |
-----+-----+----------+-----+-----
| 1 | 2013-07-10|
| 2 | 2013-07-10|
| 3 | 2013-07-10|
| 1 | 2013-07-11|
| 2 | 2013-07-11|
| 4 | 2013-07-11|
| 2 | 2013-07-12|
| 3 | 2013-07-12|
| 4 | 2013-07-12|
| 1 | 2013-07-13|
| 3 | 2013-07-13|
| 4 | 2013-07-13|
我想它的結果是:
attendance TABLE
| student_id| 2013-07-10 |2013-07-11|2013-07-12|2013-07-13
-----+-----+----------+-----+----------+-----+----------+-----+-----
| 1 | P |P | P| A
| 2 | P |P | A| P
| 3 | A |P | P| P
| 4 | P |A | P| P
我試着用這樣的:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(`att_date` = "', `att_date`,'","P","A")) AS ', `att_date`)
) INTO @sql
FROM att_2_2013;
SET @sql = CONCAT('SELECT student_id, ', @sql, '
FROM att_2_2013
GROUP BY student_id');
SELECT @sql;
它生成的查詢:
SELECT student_id, MAX(IF(`att_date` = "2013-07-24","P","A")) AS "2013-07-24",MAX(IF(`att_date` = "2013-07-25","P","A")) AS "2013-07-25",MAX(IF(`att_date` = "2013-07-10","P","A")) AS "2013-07-10",MAX(IF(`att_date` = "2013-07-11","P","A")) AS "2013-07-11",MAX(IF(`att_date` = "2013-07-12","P","A")) AS "2013-07-12",MAX(IF(`att_date` = "2013-07-15","P","A")) AS "2013-07-15"
FROM att_2_2013
GROUP BY student_id
但是,這在某種程度上給這個錯誤: Unk '字段列表'中的列'att_date' 我不知道查詢是否正常。請給一些方向。我感謝您的幫助!
做2個查詢:在PHP構建它會更容易 – ahmad
@ahmad但我想動態地做到這一點,所以我不想運行2個查詢。任何其他方式? – Anupal