Для ситуации как этот я всегда делал его на сервере разработки. С тех пор существуют, не перекомпилировал. Вы могли всегда каждый день получать новый снимок DB и понижать его до Вашей машины. Или просто имейте локальный веб-сервер и укажите на DB на dev поле.
затем напишите
SELECT YEAR(A.FPE) AS "YEAR",
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60
THEN 1 Else 0 End) SixtydayCount,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120
THEN 1 Else 0 End) OneTwentyDayCount,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180
THEN 1 Else 0 End) OneEightyDayCount,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180
THEN 1 Else 0 End) OverOneEightyCount
From Table A
WHERE A.FPE BETWEEN '2006-01-01' AND '2008-12-31'
Group By YEAR(A.FPE)
Если вы хотите, чтобы в счетчике 120 дней и счетчике 180 дней учитывались только люди старше 60, менее 120 и т. Д., Тогда
SELECT YEAR(A.FPE) AS "YEAR",
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60
THEN 1 Else 0 End) SixtydayCount,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) Between 60 And 119
THEN 1 Else 0 End) OneTwentyDayCount,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) Between 120 And 179
THEN 1 Else 0 End) OneEightyDayCount,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) >= 180
THEN 1 Else 0 End) OverOneEightyCount
From Table A
WHERE A.FPE BETWEEN '2006-01-01' AND '2008-12-31'
Group By YEAR(A.FPE)
SELECT CASE
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 THEN '2 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 THEN '4 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 THEN '6 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 THEN '6+'
END AS NBR_MTH,
y,
COUNT(a.fpe)
FROM (
SELECT 2006 AS y
UNION ALL
SELECT 2007 AS y
UNION ALL
SELECT 2008 AS y
)
LEFT JOIN
A
ON A.FPE >= CAST(CONCAT(y, '-01-01') AS DATETIME)
AND a.FPE < CAST(CONCAT(y + 1, '-01-01') AS DATETIME)
GROUP BY
y, mbr_mth
В отличие от простого GROUP BY YEAR ( )
, будет выбрано 0
даже для отсутствующих записей (например, если не было записей 6+
в 2008
)
На самом деле, большинство СУБД не позволяют GROUP BY использовать псевдонимы, поэтому оно должно быть
...
GROUP BY
YEAR(A.FPE),
CASE
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 THEN '2 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 THEN '4 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 THEN '6 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 THEN '6+'
END
Сгруппируйте по столбцу вашего дела Оператор представляет:
SELECT
YEAR(A.FPE) AS "YEAR",
CASE
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 THEN '2 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 THEN '4 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 THEN '6 '
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 THEN '6+'
END AS "NBR MTH",
COUNT(1) AS "TOTAL"
FROM Table
WHERE
A.FPE BETWEEN '2006-01-01' AND '2008-12-31'
GROUP BY
"YEAR",
"NBR MTH"
Этот запрос даст вам количество каждой записи для каждой уникальной комбинации год / "NBR MTH".