0

私は以下を試しましたが、うまくいきません。別の日に現在の学生の出席を含むテーブルがあります。以下のようにクロス集計クエリが必要になることはわかっています。特に、これを Codeigniter で実行したいと考えています。

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

しかし、これはどういうわけかこのエラーを出します: 不明な列 'att_date' in 'field list' I don't know as query is fine. 道順を教えてください。私はあなたの助けに感謝します!

4

1 に答える 1

0

これを確認した後、クエリに引用符がないようです

作業バージョンは次のとおりです。

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;
于 2013-07-29T20:31:34.480 に答える