powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
25 сообщений из 97, страница 3 из 4
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164654
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучказавершение

Итак, конечный текст запроса:
запрос(0) ИтоговыйTRANSFORM MIN(N)
SELECT ord, DealStage
FROM
(
SELECT DealStage,M,ord,Count(1) AS N FROM SRC GROUP BY M,DealStage,ord
UNION ALL
SELECT T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM SRC AS T INNER JOIN (SELECT M,Count(1) AS N FROM SRC GROUP BY M) S ON T.M=S.M
GROUP BY T.M,T.DealStage,T.ord
UNION ALL
SELECT DealStage,'ИТОГО',ord,Count(1) FROM SRC GROUP BY DealStage,ord
UNION ALL
SELECT T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM SRC T,(SELECT Count(1) AS N FROM SRC) S
GROUP BY T.DealStage,T.ord

UNION ALL
SELECT 'Поступившие заявки',M,1,Count(1) FROM SRC GROUP BY M
UNION ALL
SELECT 'Поступившие заявки',M & '%',1,100 FROM SRC GROUP BY M
UNION ALL
SELECT 'Поступившие заявки','ИТОГО',1,Count(1) FROM SRC
UNION ALL
SELECT 'Поступившие заявки','ИТОГО%', 1, 100 FROM SRC

UNION ALL
SELECT DealStage,M,ord,Count(1) AS N FROM REF GROUP BY M,DealStage,ord
UNION ALL
SELECT T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM REF AS T INNER JOIN (SELECT M,Count(1) AS N FROM REF GROUP BY M) S ON T.M=S.M
GROUP BY T.M,T.DealStage,T.ord
UNION ALL
SELECT DealStage,'ИТОГО',ord,Count(1) FROM REF GROUP BY DealStage,ord
UNION ALL
SELECT T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM REF T,(SELECT Count(1) AS N FROM REF) S
GROUP BY T.DealStage,T.ord

) AS X

GROUP BY ord, DealStage
ORDER BY ord, DealStage
PIVOT M IN (
'Январь','Январь%',
'Февраль','Февраль%',
'Март','Март%',
'Апрель','Апрель%',
'Май','Май%',
'Июнь','Июнь%',
'Июль','Июль%',
'Август','Август%',
'Сентябрь','Сентябрь%',
'Октябрь','Октябрь%',
'Ноябрь','Ноябрь%',
'Декабрь','Декабрь%',
'ИТОГО','ИТОГО%'
)

Черная часть - первый Итоговый запрос (из той БД, что я выкладывал)
Синий кусок - новая добавка, которую весь вечер мучали, и которая должна дать вам в результате строки со статистикой Причин отказа.
***Красным - опционная добавка, чтобы строки с причинами отсортировать по алфавиту

И для полной отчетности допишу сюда же тексты двух исходных запросов:
запрос(1) SRCSELECT DealStage, Format(DateClosed,"mmmm") AS M, IIF(DealStage='Реализация',2,3) AS ord
FROM qdfDeals WHERE Year(DateClosed)=2015 AND DealStage IN ('Реализация','Отказ')запрос(2) REFSELECT RefuseReasons AS DealStage, Format(DateClosed,"mmmm") AS M, 4 AS ord
FROM qdfDeals WHERE Year(DateClosed)=2015 AND DealStage = 'Отказ'
И еще раз важное замечание по конечному решению:
в этих запросах предполагается, что поле RefuseReasons - обычное текстовое поле, в котором записана ОДНА причина отказа (т.е. это НЕ то многозначное поле RefuseReasons, которое у вас есть сейчас)

И пожелание:
Если у вас есть такая возможность, рекомендую отказаться от использования многозначных полей.
Множественность атрибутов для одной записи некоторой таблицы (как это происходит в вашем случае: несколько причин одного отказа) чудесно реализуется более человечьим способом при помощи одной дополнительной таблицы

P.S.
запросы писал умозрительно, в данный момент проверить не на чем,
поэтому неизбежны ошибки/очепятки, будьте готовы

Успехов.
---


Результат получился. но с ошибками.

См. скиншот.
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164655
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ainur.sm,
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164657
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ainur.sm,
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164660
Ainur.sm,

а в запросах SRC и REF при этом в условиях отбора год одинаковый указан?
проверьте
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164666
проверил, считает как надо

забил с вашего скриншота данные
выставил в запросах SRC и REF условие WHERE Year(DateClosed)=2014 ...
смотрите результат
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164879
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,
Спасибо...


И еще один вопрос. как сгруппировать по менеджеру кол-во поступившие заявки и отказы, и причины отказы?
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164914
Ainur.smнепоймучка,
Спасибо...


И еще один вопрос. как сгруппировать по менеджеру кол-во поступившие заявки и отказы, и причины отказы?
можно по аналогии с тем, как вот здесь я предлагал вам делать группировку по году в отдельном столбце -
только вместо года использовать поле менеджера

в итоге вы получите в результате имя менеджера в новом первом столбце, и его показателями во прочих столбцах
UserordDealStageФевральФевраль%...Винокурова1Поступившие заявки2100...Винокурова2Реализация...Винокурова3Отказ233...Винокурова4Неустроило время ответа250...Иконников1Поступившие заявки1100...Иконников2Реализация117.....................
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164921
вдогонку:

по сравнению с описанной ранее группировкой по году,
при группировке по манагеру есть еще один нюанс:

в Итоговом запросе
в те union-select'ы, которые содержат под-select'ы (для вычисления %),
следует добавить в INNER JOIN связь по этому полю User, т.е. например:

там где было так
Код: vbnet
1.
2.
3.
SELECT T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM SRC AS T INNER JOIN (SELECT M,Count(1) AS N FROM SRC GROUP BY M) S ON T.M=S.M
GROUP BY T.M,T.DealStage,T.ord


должно в итоге стать так:
Код: vbnet
1.
2.
3.
4.
SELECT T.User,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM SRC AS T INNER JOIN (SELECT User,M,Count(1) AS N FROM SRC GROUP BY User,M) S ON T.M=S.M AND T.User=S.User
GROUP BY T.User,T.M,T.DealStage,T.ord
'...


таких подзапросов (с под-select'ом) в Итоговом запросе 4 штуки,
причем в двух из них ранее не было INNER JOIN - в них надо добавить INNER JOIN по полю User
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164924
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,

Спасибо. Отдельно для Usera создать запрос ? как SRC, REF
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164926
вдогонку-2:

и еще, я заметил, что на вашей последней картинке в строке 'Поступившие заявки'
в столбце процентов значение не 100% (в отличие от предыдущего варианта)

в этом варианте, судя по всему, это значение означает
процент заявок этого менеджера от ОБЩЕГО числа заявок в данном МЕСЯЦЕ

если так, то для этого вам потребуется подправить еще один union-select в Итоговом запросе,
а именно вот этот:
Код: vbnet
1.
SELECT 'Поступившие заявки',M & '%',1,100 FROM SRC GROUP BY M


переделать так:
Код: vbnet
1.
2.
3.
SELECT T.User,'Поступившие заявки',T.M & '%',1,Round(Count(1)/Min(S.N)*100)
FROM SRC T INNER JOIN (SELECT M,Count(1) AS N FROM SRC GROUP BY M) S ON T.M=S.M
GROUP BY User,M
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164930
Ainur.smнепоймучка,

Спасибо. Отдельно для Usera создать запрос ? как SRC, REF
нет, прямо в SRC и REF добавить это поле - т.е. в запросы, которые испольуются для Итогового кросс-запроса
для данного варианта с группировками по юзеру
(если это отдельная задача, для которой будете делать свои отдельные запросы, то
делайте копии SRC и REF - и туда добавляйте поле USER'a)

в таком духе
Код: vbnet
1.
2.
SELECT UserName1 AS User,DealStage, Format(DateClosed,"mmmm") AS M, IIF(DealStage='Реализация',2,3) AS ord
FROM #dbTmp#qdfDeals WHERE Year(DateClosed)=2014 AND DealStage IN ('Реализация','Отказ')
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164931
чуток лишнего там прихватил,
надо FROM qdfDeals
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164932
непоймучкаAinur.smнепоймучка,

Спасибо. Отдельно для Usera создать запрос ? как SRC, REF
нет, прямо в SRC и REF добавить это поле - т.е. в запросы, которые испольуются для Итогового кросс-запроса
для данного варианта с группировками по юзеру
(если это отдельная задача, для которой будете делать свои отдельные запросы, то
делайте копии SRC и REF - и туда добавляйте поле USER'a)


Хотя зря я это, ни к чему делать копии - дописывайте прямо в существующие SRC, REF -
там же просто выборка, группировок нет, доп.поле никак там не помешает.

Т.е. прямо эту пару запросов SRC И REF (с полем User)
можно будет использовать в обоих вариантах вашего Итогового кросс-запроса
(и с группировкой по менеджеру, и без нее)
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164937
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,
Ошибка синтаксиса from

TRANSFORM Min(X.N) AS [Min-N]
SELECT X.ord, X.DealStage
FROM (SELECT DealStage,M,ord,Count(1) AS N FROM qdfSRC2 GROUP BY M,DealStage,ord
UNION ALL
SELECT T.User,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM qdfSRC2 AS T INNER JOIN (SELECT User,M,Count(1) AS N FROM qdfSRC2 GROUP BY User,M) S ON T.M=S.M AND T.User=S.User
GROUP BY T.User,T.M,T.DealStage,T.ord
UNION ALL
SELECT DealStage,'ИТОГО',ord,Count(1) FROM qdfSRC2 GROUP BY DealStage,ord
UNION ALL
SELECT T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM qdfSRC2 AS T INNER JOIN(SELECT User,Count(1) AS N FROM qdfSRC2) S
GROUP BY T.DealStage,T.ord
UNION ALL
SELECT 'Поступившие заявки',M,1,Count(1) FROM qdfSRC2 GROUP BY M
UNION ALL
SELECT T.User,'Поступившие заявки',T.M & '%',1,Round(Count(1)/Min(S.N)*100)
FROM qdfSRC2 T INNER JOIN (SELECT M,Count(1) AS N FROM qdfSRC2 GROUP BY M) S ON T.M=S.M
GROUP BY User,M
UNION ALL
SELECT 'Поступившие заявки','ИТОГО',1,Count(1) FROM qdfSRC2
UNION ALL
SELECT 'Поступившие заявки','ИТОГО%', 1, 100 FROM qdfSRC2
UNION ALL
SELECT DealStage,M,ord,Count(1) AS N FROM qdfREF2 GROUP BY M,DealStage,ord
UNION ALL
SELECT T.User,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM qdfREF2 AS T INNER JOIN (SELECT User,M,Count(1) AS N FROM qdfREF2 GROUP BY User,M) S ON T.M=S.M AND T.User=S.User
GROUP BY T.User,T.M,T.DealStage,T.ord
UNION ALL
SELECT DealStage,'ИТОГО',ord,Count(1) FROM qdfREF2 GROUP BY DealStage,ord
UNION ALL
SELECT T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM qdfREF2 AS T INNER JOIN(SELECT User,Count(1) AS N FROM qdfREF2) S
GROUP BY T.DealStage,T.ord

) AS X
GROUP BY X.ord, X.DealStage
ORDER BY X.ord, X.DealStage
PIVOT X.M In (
'Январь','Январь%',
'Февраль','Февраль%',
'Март','Март%',
'Апрель','Апрель%',
'Май','Май%',
'Июнь','Июнь%',
'Июль','Июль%',
'Август','Август%',
'Сентябрь','Сентябрь%',
'Октябрь','Октябрь%',
'Ноябрь','Ноябрь%',
'Декабрь','Декабрь%',
'ИТОГО','ИТОГО%'
);
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164944
Ainur.smнепоймучка,
Ошибка синтаксиса from

TRANSFORM Min(X.N) AS [Min-N]
SELECT X.ord, X.DealStage
FROM (SELECT DealStage,M,ord,Count(1) AS N FROM qdfSRC2 GROUP BY M,DealStage,ord
UNION ALL
SELECT T.User,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM qdfSRC2 AS T INNER JOIN (SELECT User,M,Count(1) AS N FROM qdfSRC2 GROUP BY User,M) S ON T.M=S.M AND T.User=S.User
GROUP BY T.User,T.M,T.DealStage,T.ord
UNION ALL
SELECT DealStage,'ИТОГО',ord,Count(1) FROM qdfSRC2 GROUP BY DealStage,ord
UNION ALL
SELECT T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM qdfSRC2 AS T INNER JOIN(SELECT User,Count(1) AS N FROM qdfSRC2) S
GROUP BY T.DealStage,T.ord
UNION ALL
SELECT 'Поступившие заявки',M,1,Count(1) FROM qdfSRC2 GROUP BY M
UNION ALL
SELECT T.User,'Поступившие заявки',T.M & '%',1,Round(Count(1)/Min(S.N)*100)
FROM qdfSRC2 T INNER JOIN (SELECT M,Count(1) AS N FROM qdfSRC2 GROUP BY M) S ON T.M=S.M
GROUP BY User,M
UNION ALL
SELECT 'Поступившие заявки','ИТОГО',1,Count(1) FROM qdfSRC2
UNION ALL
SELECT 'Поступившие заявки','ИТОГО%', 1, 100 FROM qdfSRC2
UNION ALL
SELECT DealStage,M,ord,Count(1) AS N FROM qdfREF2 GROUP BY M,DealStage,ord
UNION ALL
SELECT T.User,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM qdfREF2 AS T INNER JOIN (SELECT User,M,Count(1) AS N FROM qdfREF2 GROUP BY User,M) S ON T.M=S.M AND T.User=S.User
GROUP BY T.User,T.M,T.DealStage,T.ord
UNION ALL
SELECT DealStage,'ИТОГО',ord,Count(1) FROM qdfREF2 GROUP BY DealStage,ord
UNION ALL
SELECT T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM qdfREF2 AS T INNER JOIN(SELECT User,Count(1) AS N FROM qdfREF2) S
GROUP BY T.DealStage,T.ord

) AS X
GROUP BY X.ord, X.DealStage
ORDER BY X.ord, X.DealStage
PIVOT X.M In (
'Январь','Январь%',
'Февраль','Февраль%',
'Март','Март%',
'Апрель','Апрель%',
'Май','Май%',
'Июнь','Июнь%',
'Июль','Июль%',
'Август','Август%',
'Сентябрь','Сентябрь%',
'Октябрь','Октябрь%',
'Ноябрь','Ноябрь%',
'Декабрь','Декабрь%',
'ИТОГО','ИТОГО%'
);

проверяйте по очереди каждый select в отдельности (без union all) - все должны работать сами-по-себе
какой не сработает - смотрите его внимательнее

и кстати:
это новое поле User надо добавить в КАЖДЫЙ select и в каждый group by, какие тут есть -
(в.ч. и в подзапросы, где вообще НЕ было group by, надо также добавить group by User)
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39164946
кроме того, на вскидку вижу пару ошибок, на которые точно может так ругаться:

там, где вы добавили INNER JOIN, но забыли дописать по какому полю
например:
Код: vbnet
1.
FROM qdfREF2 AS T INNER JOIN(SELECT User,Count(1) AS N FROM qdfREF2) S ON T.User=S.User


выделенное вы забыли написать (в этом и в другом, аналогичном месте)

кроме того в
Код: vbnet
1.
SELECT T.User,'Поступившие заявки',T.M & '%',...


к ON T.M=S.M - забыли добавить AND T.User=S.User
(как это сделано в более другом подзапросе, о чем я пояснял ранее)
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165348
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучканепоймучкапропущено...

нет, прямо в SRC и REF добавить это поле - т.е. в запросы, которые испольуются для Итогового кросс-запроса
для данного варианта с группировками по юзеру
(если это отдельная задача, для которой будете делать свои отдельные запросы, то
делайте копии SRC и REF - и туда добавляйте поле USER'a)


Хотя зря я это, ни к чему делать копии - дописывайте прямо в существующие SRC, REF -
там же просто выборка, группировок нет, доп.поле никак там не помешает.

Т.е. прямо эту пару запросов SRC И REF (с полем User)
можно будет использовать в обоих вариантах вашего Итогового кросс-запроса
(и с группировкой по менеджеру, и без нее)

Если в REF - после добавление поле USER'a)

в таком духе
Код: sql
1.
2.
SELECT UserName1 AS User,DealStage, Format(DateClosed,"mmmm") AS M, IIF(DealStage='Реализация',2,3) AS ord
FROM #dbTmp#qdfDeals WHERE Year(DateClosed)=2014 AND DealStage IN ('Реализация','Отказ')



Будет ли учитывать с группировкой по причине и по менеджеру ??
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165391
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ainur.smнепоймучкапропущено...


Хотя зря я это, ни к чему делать копии - дописывайте прямо в существующие SRC, REF -
там же просто выборка, группировок нет, доп.поле никак там не помешает.

Т.е. прямо эту пару запросов SRC И REF (с полем User)
можно будет использовать в обоих вариантах вашего Итогового кросс-запроса
(и с группировкой по менеджеру, и без нее)

Если в REF - после добавление поле USER'a)

в таком духе
Код: sql
1.
2.
SELECT UserName1 AS User,DealStage, Format(DateClosed,"mmmm") AS M, IIF(DealStage='Реализация',2,3) AS ord
FROM #dbTmp#qdfDeals WHERE Year(DateClosed)=2014 AND DealStage IN ('Реализация','Отказ')



Будет ли учитывать с группировкой по причине и по менеджеру ??

Добавила в REF User сортирует по менеджеру и по причине. и добавила в SRC

SELECT UserName1 AS Users, DealStage, RefuseReasons, Format(DateClosed,"mmmm") AS M, 4 AS ord
FROM qdfDeals
WHERE Year(DateClosed)=2014 And DealStage='Отказ';
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165443
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучкакроме того, на вскидку вижу пару ошибок, на которые точно может так ругаться:

там, где вы добавили INNER JOIN, но забыли дописать по какому полю
например:
Код: vbnet
1.
FROM qdfREF2 AS T INNER JOIN(SELECT User,Count(1) AS N FROM qdfREF2) S ON T.User=S.User


выделенное вы забыли написать (в этом и в другом, аналогичном месте)

кроме того в
Код: vbnet
1.
SELECT T.User,'Поступившие заявки',T.M & '%',...


к ON T.M=S.M - забыли добавить AND T.User=S.User
(как это сделано в более другом подзапросе, о чем я пояснял ранее)

ошибка


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
TRANSFORM MIN(N)
SELECT Users, ord, DealStage
FROM [SELECT Users,DealStage,M,ord,Count(1) AS N FROM SRC GROUP BY  Users,M,DealStage,ord
UNION ALL
SELECT T.Users,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM SRC AS T INNER JOIN (SELECT Users,M,Count(1) AS N FROM SRC GROUP BY  Users, M) S ON T.M=S.M AND T.Users=S.Users
GROUP BY T.Users,T.M,T.DealStage,T.ord
UNION ALL
SELECT Users,DealStage,'ИТОГО',ord,Count(1) FROM SRC GROUP BY  Users,DealStage,ord
UNION ALL
SELECT T.Users,T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM SRC AS T INNER JOIN (SELECT Users,Count(1) AS N FROM SRC GROUP BY  Users) S ON T.M=S.M AND T.Users=S.Users
GROUP BY T.Users,T.DealStage,T.ord



]. AS X
GROUP BY  Users, ord, DealStage
ORDER BY  Users,ord, DealStage
PIVOT M IN (
'Январь','Январь%',
'Февраль','Февраль%',
'Март','Март%',
'Апрель','Апрель%',
'Май','Май%',
'Июнь','Июнь%',
'Июль','Июль%',
'Август','Август%',
'Сентябрь','Сентябрь%',
'Октябрь','Октябрь%',
'Ноябрь','Ноябрь%',
'Декабрь','Декабрь%',
'ИТОГО','ИТОГО%'
);
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165467
Ainur.sm
ошибка

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
TRANSFORM MIN(N)
SELECT Users, ord, DealStage
FROM [SELECT Users,DealStage,M,ord,Count(1) AS N FROM SRC GROUP BY  Users,M,DealStage,ord
UNION ALL
SELECT T.Users,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM SRC AS T INNER JOIN (SELECT Users,M,Count(1) AS N FROM SRC GROUP BY  Users, M) S ON T.M=S.M AND T.Users=S.Users
GROUP BY T.Users,T.M,T.DealStage,T.ord
UNION ALL
SELECT Users,DealStage,'ИТОГО',ord,Count(1) FROM SRC GROUP BY  Users,DealStage,ord
UNION ALL
SELECT T.Users,T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM SRC AS T INNER JOIN (SELECT Users,Count(1) AS N FROM SRC GROUP BY  Users) S ON T.M=S.M AND T.Users=S.Users
GROUP BY T.Users,T.DealStage,T.ord

]. AS X
GROUP BY  Users, ord, DealStage
ORDER BY  Users,ord, DealStage
PIVOT M IN (
'Январь','Январь%',
'Февраль','Февраль%',
'Март','Март%',
'Апрель','Апрель%',
'Май','Май%',
'Июнь','Июнь%',
'Июль','Июль%',
'Август','Август%',
'Сентябрь','Сентябрь%',
'Октябрь','Октябрь%',
'Ноябрь','Ноябрь%',
'Декабрь','Декабрь%',
'ИТОГО','ИТОГО%'
);



выделенное лишнее

М - это месяц, а в строчках ИТОГО у нас данные за год,
там поле М нигде не должно фигурировать
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165515
Ainur.sm,

запрос Итоговый по менеджерам
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
TRANSFORM MIN(N)
SELECT User,ord,DealStage
FROM
(
/* число 'реализаций' и 'отказов' у менеджера за один месяц */
SELECT User,DealStage,M,ord,Count(1) AS N FROM  SRC  GROUP BY User,M,DealStage,ord
UNION ALL
/* процент 'реализаций' и 'отказов' от общего числа заявок менеджера за один месяц */
SELECT T.User,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM  SRC  T INNER JOIN (SELECT User,M,Count(1) AS N FROM  SRC  GROUP BY User,M) S ON T.M=S.M AND T.User=S.User
GROUP BY T.User,T.M,T.DealStage,T.ord
 
UNION ALL
/* число 'реализаций' и 'отказов' у менеджера за ГОД */
SELECT User,DealStage,'ИТОГО',ord,Count(1) FROM  SRC  GROUP BY User,DealStage,ord
UNION ALL
/* процент 'реализаций' и 'отказов' от общего числа заявок менеджера за ГОД */
SELECT T.User,T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM  SRC  T INNER JOIN (SELECT User,Count(1) AS N FROM  SRC  GROUP BY User) S ON T.User=S.User
GROUP BY User,T.DealStage,T.ord
 
UNION ALL
/* общее число заявок у менеджера за один месяц */
SELECT User,'Поступившие заявки',M,1,Count(1) FROM  SRC  GROUP BY User,M
UNION ALL
/* процент числа заявок менеджера от общего числа заявок за один месяц */
SELECT T.User,'Поступившие заявки',T.M & '%',1,Round(Count(1)/MIN(S.N)*100)
FROM  SRC  T INNER JOIN (SELECT M,Count(1) AS N FROM  SRC  GROUP BY M) S ON T.M=S.M
GROUP BY User,M
 
UNION ALL
/* общее число заявок у менеджера за ГОД */
SELECT User,'Поступившие заявки','ИТОГО',1,Count(1) FROM  SRC  GROUP BY User
UNION ALL
/* процент числа заявок менеджера от общего числа заявок за ГОД */
SELECT T.User,'Поступившие заявки','ИТОГО%',1,Round(Count(1)/Min(S.N)*100)
FROM  SRC  T, (SELECT Count(1) AS N FROM  SRC ) S
GROUP BY T.User
 
UNION ALL
/* число отказов по одной причине у менеджера за один месяц */
SELECT User,DealStage,M,ord,Count(1) AS N FROM  REF  GROUP BY User,M,DealStage,ord
UNION ALL
/* процент отказов по одной причине от общего числа отказов менеджера за один месяц */
SELECT T.User,T.DealStage,T.M & "%",T.ord,Round(Count(1)/Min(S.N)*100)
FROM  REF  T INNER JOIN (SELECT User,M,Count(1) AS N FROM  REF  GROUP BY User,M) S ON T.M=S.M AND T.User=S.User
GROUP BY T.User,T.M,T.DealStage,T.ord
 
UNION ALL
/* число отказов по одной причине у менеджера за ГОД */
SELECT User,DealStage,'ИТОГО',ord,Count(1) FROM  REF  GROUP BY User,DealStage,ord
UNION ALL
/* процент отказов по одной причине от общего числа отказов менеджера за ГОД */
SELECT T.User,T.DealStage,'ИТОГО%',T.ord,Round(Count(1)/Min(S.N)*100)
FROM  REF  T INNER JOIN (SELECT User,Count(1) AS N FROM  REF  GROUP BY User) S ON T.User=S.User
GROUP BY T.User,T.DealStage,T.ord
 
) AS X
 
GROUP BY User,ord,DealStage
ORDER BY User,ord,DealStage
PIVOT M IN (
'Январь','Январь%',
'Февраль','Февраль%',
'Март','Март%',
'Апрель','Апрель%',
'Май','Май%',
'Июнь','Июнь%',
'Июль','Июль%',
'Август','Август%',
'Сентябрь','Сентябрь%',
'Октябрь','Октябрь%',
'Ноябрь','Ноябрь%',
'Декабрь','Декабрь%',
'ИТОГО','ИТОГО%'
)

Синим выделены добавки, внесенные в прежний Итоговый запрос
чтобы он делал разбивку/группировку данных по менеджерам

Красным выделены имена исходных запросов SRC и REF
как уже ранее было сказано, вобщем-то не требуется для нового Итогового запроса (по менеджерам)
делать какие-то новые/отдельные запросы SRC2 и REF2 - можно использовать прежние, в которые
просто добавить поле User в раздел SELECT

Зеленым выделены КОММЕНТАРИИ, поясняющие для каждого union-select'а смысл данных, которые там выбираются
В рабочей версии запроса зеленые строки надо удалить.

Пробуйте.
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165530
вдогонку -
см. рабочий запрос в архиве
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165682
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучкану и собственно, чтобы реализовать этот вариант(2), можно сделать так:


1) в запрос SRC в раздел SELECT добавить выражение вида
Код: vbnet
1.
Year(DateClosed) AS Y


2) а в Итоговом запросе дописать в КАЖДОМ UNION-подзапросе в разделах SELECT и GROUP BY этот самый Y - везде первым полем по-порядку (в тех union-подзапросах, где GROUP BY вообще не было - дописать 'GROUP BY Y')

и в итоге получите примерно такое
ГОДOPERATIONянвянв%февфев%...ИТОГОИТОГО%2015Поступившие заявки2010040100...100001002015Реализация10502050...5000502015Отказ10502050...5000502014Поступившие заявки21004100...10001002014Реализация150250...500502014Отказ150250...50050

в union-подзапросах дописывать Y ? чтоб сортировка по месяц и годам было?
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165686
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ainur.sm,

посмотрите как вариант
...
Рейтинг: 0 / 0
Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
    #39165688
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ainur.sm,

база города и регионы
...
Рейтинг: 0 / 0
25 сообщений из 97, страница 3 из 4
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как использовать Count "с условиями" с разбивкой по заданным периода(по месяцам) Access
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]