Предположим, у меня есть таблица, которая выглядит следующим образом
id | location | dateHired | dateRehired | dateTerminated
1 | 1 | 10/1/2011 | NULL | 12/1/2011
2 | 1 | 10/3/2011 | 11/1/2011 | 12/31/2011
3 | 5 | 10/5/2011 | NULL | NULL
4 | 5 | 10/5/2011 | NULL | NULL
5 | 7 | 11/5/2011 | NULL | 12/1/2011
6 | 10 | 11/2/2011 | NULL | NULL
, и я хотел сжать это в сводную таблицу так:
location | date | hires | rehires | terms
1 | 10/1/2011 | 1 | 0 | 0
1 | 10/3/2011 | 1 | 0 | 0
1 | 11/1/2011 | 0 | 1 | 0
1 | 12/1/2011 | 0 | 0 | 1
1 | 12/31/2011 | 1 | 0 | 0
5 | 10/5/2011 | 2 | 0 | 0
и т.д.
- как бы выглядел этот SQL? Я думал, что это будет что-то с эффектом:
SELECT
e.location
, -- ?
,SUM(CASE WHEN e.dateHired IS NOT NULL THEN 1 ELSE 0 END) AS Hires
,SUM(CASE WHEN e.dateRehired IS NOT NULL THEN 1 ELSE 0 END) As Rehires
,SUM(CASE WHEN e.dateTerminated IS NOT NULL THEN 1 ELSE 0 END) As Terms
FROM
Employment e
GROUP BY
e.Location
,--?
Но я не очень заинтересован, если это совершенно правильно или нет?
РЕДАКТИРОВАТЬ - Это для SQL 2008 R2.
Кроме того,
INNER JOIN в столбцах даты предполагает наличие значений для всех трех категорий, что неверно; это первоначальная проблема, которую я пытался решить. Я думал что-то вроде COALESCE, но это тоже не имеет смысла.