powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / union с группировкой и условием
25 сообщений из 25, страница 1 из 1
union с группировкой и условием
    #39629713
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть запрос:
SELECT
[Запрос ПП МО].Class,
Count([Запрос ПП МО].dbo_Devices.Code) AS PlanPov,
Sum(0) AS FactPov
FROM [Запрос ПП МО]
where (((DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))>=#4/1/2018#) And (DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))<=#4/30/2018#))) OR ((([PredPoverka]>=#4/1/2018#) And ([PredPoverka]<=#4/30/2018#)))
GROUP BY [Запрос ПП МО].Class

UNION
SELECT
[Запрос ПП МО].Class,
Sum(0) AS PlanPov,
Count([Запрос ПП МО].dbo_Devices.Code) AS FactPov
FROM [Запрос ПП МО]
where ((([Запрос ПП МО].[PredPoverka])>=#4/1/2018# And ([Запрос ПП МО].[PredPoverka])<=#4/30/2018#))
GROUP BY [Запрос ПП МО].Class
ORDER BY [Запрос ПП МО].Class;

В результате получаются строки, которые не сгрупировались (в приложенном файле это 2 и 3 строки), а хотелось бы их объединить в одну строку. Подскажите, пожалуйста, как оптимизировать запрос.
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629735
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aziz,

у вас почему то sum и count в разном порядке стоят

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT w.Class, Count(w.dbo_Devices.Code) AS PlanPov,Sum(0) AS FactPov
FROM [Запрос ПП МО] w
where (((DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))>=#4/1/2018#)
 And (DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))<=#4/30/2018#)))
 OR ((([PredPoverka]>=#4/1/2018#) And ([PredPoverka]<=#4/30/2018#)))
GROUP BY w.Class

UNION
SELECT w.Class,Sum(0) AS PlanPov,Count(w.dbo_Devices.Code) AS FactPov
FROM [Запрос ПП МО] w
where (((w.[PredPoverka])>=#4/1/2018# And (w.[PredPoverka])<=#4/30/2018#))
GROUP BY w.Class

ORDER BY 1
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629740
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aziz,
Пусть, например, этот ваш исходный запрос называется Zapos1, тогда, если я вас правильно понял, вам поможет следующий запрос на основе исходного
Код: sql
1.
select Class, Sum(PlanPov), Sum(FactPov) from Zapros1 group by Class
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629745
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aziz,
можете попробовать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select z.class,sum(z.PlanPov),count( FactPov) 
from (
SELECT w.Class, 1 AS PlanPov,0 AS FactPov FROM [Запрос ПП МО] w
where (((DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))>=#4/1/2018#)
 And (DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))<=#4/30/2018#)))
 OR ((([PredPoverka]>=#4/1/2018#) And ([PredPoverka]<=#4/30/2018#)))
UNION
SELECT w.Class,0 AS PlanPov,1 AS FactPov
FROM [Запрос ПП МО] w
where (((w.[PredPoverka])>=#4/1/2018# And (w.[PredPoverka])<=#4/30/2018#))) z
GROUP BY z.Class
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629752
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, в разном порядке из-за того, что в в первом селекте я выбираю данные по полю PlanPov (соответственно все данные в поле FactPov будут равны нулю), а во втором селекте наоборот с начало выбираю данные по полю FactPov (соответственно все данные в поле PlanPov будут равны нулю). В результате не правильное объединяются строки в которых есть данные отличные от нуля и по полю FactPov и по полю PlanPov.
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629760
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aziz, думаю, разумнее показать структуру исходных данных и сформулировать исходную задачу (а не то, как Вы её собрались решить). Сдаётся мне, что от UNION вполне можно избавиться.
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629788
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,
SELECT z.class,
Sum(z.PlanPov),
Count(z.FactPov)
FROM (SELECT w.Class, 1 AS PlanPov,0 AS FactPov FROM [Запрос ПП МО] w
where (((DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))>=#4/1/2018#)
And (DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))<=#4/30/2018#)))
OR ((([PredPoverka]>=#4/1/2018#) And ([PredPoverka]<=#4/30/2018#)))
UNION
SELECT w.Class, 0 AS PlanPov, 1 AS FactPov
FROM [Запрос ПП МО] w
where (((w.[PredPoverka])>=#4/1/2018# And (w.[PredPoverka])<=#4/30/2018#))) AS z
GROUP BY z.class;
не работает
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629807
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, приложил БД
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629833
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам же советовали:zimkonAziz,
Пусть, например, этот ваш исходный запрос называется Zapos1, тогда, если я вас правильно понял, вам поможет следующий запрос на основе исходного
Код: sql
1.
select Class, Sum(PlanPov), Sum(FactPov) from Zapros1 group by Class

Ну так и сделайте:
Код: vbnet
1.
2.
3.
SELECT Запрос1.Class, Sum(Запрос1.PlanPov) AS [Sum-PlanPov], Sum(Запрос1.FactPov) AS [Sum-FactPov]
FROM Запрос1
GROUP BY Запрос1.Class;
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629878
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, это понятно, и конечно же это будет работать... но хочется задачу реализовать в одном запросе. Поэтому и попросил помощи.
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629901
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aziz,
Тогда убивайте время и убеждайтесь,что в запросе на объединение нескольких не удастся сделать общую для всех,входящих в него запросов, группировку (а при мощности современных компьютеров речь о замедлении работы оптимизированных запросов ни разу не актуальна. Создания 2-3 "лишних" запросов,если в таблицах несколько тысяч записей,Вы не заметите)
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629908
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aziz,
попробуйте так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT w.Class,
 -sum (((DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))>=#4/1/2018#)
 And (DateAdd("m",Nz([PovInterv],1),Nz([PredPoverka],Null))<=#4/30/2018#)))
 OR ((([PredPoverka]>=#4/1/2018#) And ([PredPoverka]<=#4/30/2018#))) as planPov, 

-sum (w.[PredPoverka]>=#4/1/2018# And w.[PredPoverka]<=#4/30/2018#) AS FactPov

FROM [Запрос ПП МО] 
GROUP BY w.Class
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629964
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aziz,
Вам необходимо узнать какие приборы(наименование) и их количество необходимо поверить в текущем месяце в соответствии с датой предыдущей поверки и межповерочным интервалом. Все это в одной строке. Я правильно понял?
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629969
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, спасибо. Это то что мне нужно было.
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629972
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS: по плану и фактически. Но в таблице я не увидел поля с отметкой о проведении поверки(или даты фактической поверки)
В принципе, я бы сделал 2 таблицы:приборы учета 1:М поверки
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629973
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, да все так.
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39629999
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aziz,
а вот если срок поверки 15.4.2018 а фактически она проведена 25.4.2018 (причин задержки может быть мильон и данных о дате фактической поверки у Вас нет),то какие штрафные санкции и за какой период Вы будете применять-я все это к тому,что на этой структуре серьезную,"боевую" БД не создать
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39630033
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, Правильно мыслите. Прекрасно понимаю эту проблему. Но задача контроля сроков поверки не стоит.
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39630081
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aziz,
сейчас нет,но когда возникнет, придется все переделывать,а при правильной структуре пришлось бы добавить пару отчетов(форм, запросов ничего не меняя,а лишь добавив)
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39632482
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, решил немного усложнить запрос. Добавил в него параметры (дата начала и дата конца). Хочу на основании этого запроса с параметрами создать отчет. Вот что получилось:

Private Sub Report_Open(Cancel As Integer)
Dim q As DAO.QueryDef
Dim rst As DAO.Recordset
Set q = CurrentDb.QueryDefs("МойЗапросСпараметрами")
q.Parameters("DataN").Value = Format(Me.Поле17, "mm\/dd\/yyyy")
q.Parameters("DataK").Value = Format(Me.Поле21, "mm\/dd\/yyyy")
q.Execute
q.close: Set q=Nothing
End Sub

Как я понимаю, в данном случае q.Execute не подходит. Посоветуете как правильно открыть запрос ?
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39632500
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак я понимаю, в данном случае q.Execute не подходит
это не самая большая проблема в вашем коде
в каких отношениях состоят q и Report_Open ?
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39632516
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha, еще в никаких. Пока только пытаюсь понять как это реализовать.
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39632558
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AzizПока только пытаюсь понять как это реализовать.
Сделать форму - в ней два поля для параметров, в МойЗапросСпараметрами для
поля DataN прописать условие типа =[Forms]![МояФорма]![МойПараметр1].[Text],
для второго параметра по аналогии...
добавить кнопку
Код: vbnet
1.
docmd.openreport "МойОтчет", acviewpreview


..из Report_Open все выкинуть
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39632604
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считаю что структура должна быть примерно такой.а дальше создавайте соответствующие формы(запросы,отчеты) после заполнения поля с отметкой о поверке добавляйте(запросом на добавление или рекордсетом) записи в соответствующие таблицы. Удачи!
...
Рейтинг: 0 / 0
union с группировкой и условием
    #39632937
Aziz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha, Спасибо. Все получилось.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / union с группировкой и условием
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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