-1

我必须与打击结构表

会议

  • 会议ID
  • 会议日期
  • 会议名称

MeetingPersion参加会议的人

  • ID
  • 会议ID
  • 个人ID
  • IsPresent 位

这是用于测试的示例行

会议桌行

  • meetingID:1 -- 2010/05/05 -- MeetingX
  • meetingID:2 -- 2010/05/07 -- MeetingY

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

1

尝试

SELECT m.MeetingTitle,
       SUM(CASE WHEN p.IsPresent = 1 THEN 1 ELSE 0 END) NumberOfPresent,
       SUM(CASE WHEN p.IsPresent = 0 THEN 1 ELSE 0 END) NumberOfAbsents
  FROM Meeting m LEFT JOIN MeetingPerson p
    ON m.meetingID = p.meetingID
 GROUP BY m.meetingID

输出:

| MEETINGTITLE | NUMBEROFPRESENT | NUMBEROFABSENTS |
----------------------------------------------------
|     MeetingX |               0 |               0 |
|     MeetingY |               2 |               1 |

这是SQLFiddle演示。

于 2013-06-04T07:26:26.113 回答
0
SELECT
m.meetingtitle
,SUM(CASE WHEN i.ispresent = 1 THEN 1 ELSE 0 END) AS numberofabsents
,SUM(CASE WHEN i.ispresent = 0 THEN 1 ELSE 0 END) AS numberofabsents
FROM 
meeting m
LEFT OUTER JOIN meetingperson i on i.meetingid = m.meetingid
GROUP BY
m.meetingtitle
于 2013-06-04T07:26:41.667 回答
0

请试试这个。

SELECT M.MEETINGTITLE, SUM(CASE WHEN ISPRESENT ISNULL THEN 0 ELSE 1) NumberOfPresent , SUM(CASE WHEN ISPRESENT ISNULL THEN 1 ELSE 0) AS NOOFABSENTEES
FROM MEETING M INNER JOIN MEETINGPERSON P
WHERE M.MEETINGID=P.MEETINGID
GROUP BY M.MEETINGTITLE

谢谢。

于 2013-06-04T07:28:04.550 回答
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 回答