-1

私はブロー構造でテーブルに立つ必要があります

ミーティング

  • ミーティングID
  • 会議日
  • 会議のタイトル

MeetingPersionミーティングに参加する人々

  • ID
  • ミーティングID
  • 個人ID
  • IsPresent ビット

これはテスト用のサンプル行です

会議テーブルの列

  • meetingID:1 -- 2010/05/05 -- MeetingX
  • meetingID:2 -- 2010/05/07 -- ミーティングY

MeetingPerson テーブルの行

MeetingID:2
PersonID:1
IsPresent:true


MeetingID:2
PersonID:2
IsPresent:true

MeetingID:2
PersonID:3
IsPresent:false

MeetingID:2
PersonID:4
IsPresent:null

レポートに表示するためのクエリが必要であり、サンプルの日付、レポートのタイトルを含むこの結果が必要です

MeetingTitle | NumberOfPresent | NumberOfAbsents

サンプルデータの結果は次のようになります

Title:MeetingX | NumberOfPresent:0 | NumberOfAbsents:0
Title:MeetingY | NumberOfPresent:2 | NumberOfAbsents:1
4

4 に答える 4

0

同じためにこの動的クエリを使用することもできます。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(case when `IsPresent` = ',
      `IsPresent`,
      ' then 1 ELSE 0 END) AS `IsPresent_',
      `IsPresent`, '`'
    )
  ) INTO @sql
FROM MeetingPerson;

SET @sql = CONCAT('SELECT meetingTitle, ', @sql, '
                  FROM Meeting 
             LEFT JOIN MeetingPerson  
                    ON Meeting.meetingID = MeetingPerson.MeetingID
              GROUP BY meetingTitle 
                  ');

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

結果:

╔══════════════╦═════════════╦═════════════╗
║ MEETINGTITLE ║ ISPRESENT_1 ║ ISPRESENT_0 ║
╠══════════════╬═════════════╬═════════════╣
║ MeetingX     ║           0 ║           0 ║
║ MeetingY     ║           2 ║           1 ║
╚══════════════╩═════════════╩═════════════╝

このSQLFiddleを参照してください

于 2013-06-04T08:58:38.497 に答える