sql >> データベース >  >> RDS >> Mysql

ピボットテーブルクエリを使用した動的列

    私の知る限り、SELECTステートメントに列を動的に追加することはできません。あなたが求めているのはデータを提示する方法であり、それはMySQLが気にかけていることではありません。フロントエンドで処理する必要があります。

    ただし、モデルにクエリを作成し、MAX(case...を動的に挿入することで、これらの新しい列を動的に追加することで、不正行為を行うことができます。 クエリ文字列に。しかし、それは良い解決策ではありません。

    編集:

    だから、あなたは醜い解決策について話していると思います。基本的に、クエリ文字列(擬似コード)を動的に作成する必要があります:

    $initialDay = 02/28/2012;
    $lastDay = 03/28/2012;
    $dayNumber = 1;
    $sql = 'Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id';
    while ($initialDay <= $lastDay) {
        $sql .= ', MAX(case WHEN week = $initialDay then present end) as day' . $dayNumber;
        $initialDay = $initialDay + 1 day;
        $dayNumber++;
    }
    $sql .= ' From attendance blah blah...';
    

    次に、2012年2月18日から2012年3月18日までの日付のクエリは次のようになります。

    Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id,
    ,MAX(case WHEN week = '02/18/2012' then present end) as day1
    ,MAX(case WHEN week = '02/19/2012' then present end) as day2
    From attendance
    LEFT JOIN cadet_record ON cadet_record.stud_no = attendance.student_id WHERE section = '$section' AND schoolyear = '$year' AND component = '$component' AND semester = '$semester'
    

    GROUP BY student_id

    列名は週でしたが、例では日数が増えているため、週ではなく日を追加したことに注意してください



    1. パラメータをpostgre関数に渡し、ExecuteReaderを使用してデータを取得するにはどうすればよいですか?

    2. Postgresを使用したDjango検索の最新の実用的なオプション?複数の基準が必要ですが、アイコンは非効率的です

    3. MySQL INSERT ... Javaでの重複キー更新:挿入/更新/変更なしの状態を区別する方法

    4. データベースの結果を配列に変換する