Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Сложный запрос!!!!  [new]
Степан111
Guest
Имеется таблица с данными о происшествиях (7 типов) и у каждого своя дата необходимо написать запрос который бы вывел количество происшествий за каждый год по каждому из 7 типов. Если за определенный год происшествий небыло то выводить ноль.
пример вывода
год|количество происшествий 1 типа|количество происшествий 2 типа| .......|кол. 7 типа|
26 фев 07, 16:43    [3833514]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос!!!!  [new]
adv
Member

Откуда:
Сообщений: 3333
На права пересдаём?

А где ваш вариант, чтобы было видно, что не получается?
26 фев 07, 16:54    [3833586]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос!!!!  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27549
Степан111
Имеется таблица с данными о происшествиях (7 типов) и у каждого своя дата необходимо написать запрос который бы вывел количество происшествий за каждый год по каждому из 7 типов. Если за определенный год происшествий небыло то выводить ноль.
пример вывода
год|количество происшествий 1 типа|количество происшествий 2 типа| .......|кол. 7 типа|

В предположении, что есть поле [Тип проиcшествия] числового типа.
Select Год, [Тип проиcшествия], Count(Nz([Тип проиcшествия]),0) As Количество
From Таблица
Group By Год, [Тип проиcшествия]
Order By Год, [Тип проиcшествия]
Этот запрос будет выдавть количество происшествий не в строку, а в столбик. Если нужно в строку, то можно сделать на его основе перекрестный или склеивать строки.
26 фев 07, 17:06    [3833672]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос!!!!  [new]
Ёжик`
Member

Откуда:
Сообщений: 5992
перекрестный запрос
строки - format([data],"yyyy") as год
столбцы - проишествия
значения - count(*)

чтобы не было пропусков годиков - это отдельная таблица нужна с годами, и если вовремя не добавлять 2008, 2009 год - данные будут выпадать, а если заранее добавлять - будут пустые ненужные строки

чтобы не выпадали проишествия - можно формат задать
26 фев 07, 17:12    [3833705]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос!!!!  [new]
Пробегал мимо
Guest
Предположим, есть таблица T_Incident
IDCode IncidentDate IncidentType
1 01.01.2001 1
2 02.01.2001 2
3 04.01.2001 1
4 15.01.2001 2
5 22.01.2001 3
6 02.02.2001 5
7 06.02.2001 4
8 11.02.2001 7
9 03.03.2001 6
10 05.03.2001 5
11 30.03.2001 4
12 01.04.2001 3
13 01.01.2002 2
14 01.01.2002 1
15 01.02.2002 2
16 01.01.2002 3
17 01.03.2002 4
18 01.04.2002 5
19 01.05.2002 6
20 01.10.2002 7
21 01.02.2003 6
22 01.04.2003 5
23 01.05.2003 4
24 01.06.2003 3
25 01.09.2003 2
26 01.11.2003 1
27 01.02.2004 2
28 01.03.2004 3
29 01.05.2004 4
30 01.07.2004 5
31 01.09.2004 6
32 01.11.2004 7
33 01.12.2004 6
34 01.12.2004 5
35 01.01.2005 4
36 01.06.2005 3
37 01.08.2005 3
38 01.11.2005 2
39 01.01.2006 1
40 01.03.2006 7
41 01.06.2006 7
42 01.09.2006 5

Запрос такой:

TRANSFORM Sum(T_TMP.[Count-IncidentType]) AS [Sum-Count-IncidentType]
SELECT T_TMP.IncidentType AS тип, Sum(T_TMP.[Count-IncidentType]) AS Всего
FROM [SELECT T_Incident.IncidentType, Year([IncidentDate]) AS IncidentYear, Count(T_Incident.IncidentType) AS [Count-IncidentType]
FROM T_Incident
GROUP BY T_Incident.IncidentType, Year([IncidentDate])
ORDER BY Year([IncidentDate])]. AS T_TMP
GROUP BY T_TMP.IncidentType
PIVOT T_TMP.IncidentYear;

Результат:

тип Всего 2001 2002 2003 2004 2005 2006
1 5 2 1 1 1
2 7 2 2 1 1 1
3 7 2 1 1 1 2
4 6 2 1 1 1 1
5 7 2 1 1 2 1
6 5 1 1 1 2
7 5 1 1 1 2

Устроит ?
26 фев 07, 17:44    [3833909]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос!!!!  [new]
Pendulum
Member

Откуда:
Сообщений: 5
Да!То что нужно!От лица автора всем спасибо!
26 фев 07, 19:15    [3834337]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить