4

私は2つの属性(id、remarks)を持つ出席という名前のテーブルを持っています。出席表からidごとに欠席・遅刻の集計を表示したい。

Attendance Table
|ID         | Remarks       |
=============================
|1          | Absent        |
|1          | Late          |
|2          | Absent        |
|2          | Absent        |
|3          | Late          |

Sample Output
|ID         | Absent   | Late    |
==================================
|1          | 1        | 1       |
|2          | 2        |         |
|3          |          | 1       |

現在、次のコードを使用して、(ID と Absent) または (ID と Late) の 2 つの列のみを出力できます。

SELECT id, count(remarks) AS Absent 
FROM attendance 
WHERE remarks = 'Absent' 
GROUP BY id;

欠席欄と遅刻欄を同時に表示できません。助けてください。ありがとう。

4

3 に答える 3

2

これは基本的にPIVOT. 関数にアクセスできない場合はPIVOT、集計関数とCASEステートメントを使用して複製できます。

select id,
  sum(case when remarks = 'Absent' then 1 else 0 end) Absent,
  sum(case when remarks = 'Late' then 1 else 0 end) Late
from attendance
group by id

デモで SQL Fiddle を参照してください

または、次を使用できますCOUNT()

select id,
  count(case when remarks = 'Absent' then 1 else null end) Absent,
  count(case when remarks = 'Late' then 1 else null end) Late
from attendance
group by id;

デモで SQL Fiddle を参照してください

于 2012-11-15T16:28:12.833 に答える
0

SUM(CASE)コンストラクトを使用して と を分離AbsentLateます。それぞれについて、値が一致する場合、CASE は 1 または 0 を返し、それらが集計によって合計されSUM()て合計数になります。ここで使用されている概念は、ピボット テーブルとして知られています。

SELECT
  id,
  SUM(CASE WHEN Remarks = 'Absent' THEN 1 ELSE 0 END) AS Absent,
  SUM(CASE WHEN Remarks = 'Late' THEN 1 ELSE 0 END) AS Late
FROM
  attendance
GROUP BY id
于 2012-11-15T16:28:12.333 に答える
0

試す:

 SELECT id, 
     Sum (Case remarks When 'Absent' Then 1 End) Absent,
     Sum (Case remarks When 'Late' Then 1 End) Late
 FROM attendance 
 GROUP BY id;
于 2012-11-15T16:28:30.147 に答える