Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.108.241] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Страницы: (15) « Первая ... 7 8 [9] 10 11 ... 14 15 все ( Перейти к последнему сообщению ) |
Сообщ.
#121
,
|
|
|
Пять страниц на форуме? И всего шесть таблиц связи, для отчета? Не проще(быстрее) функциями это сделать? |
Сообщ.
#122
,
|
|
|
Bas
На самом деле 2 страницы. Я начал первую страницу с 0 знанием SQL. Постепенно я начал получать опыт. Если я сталкиваюсь с трудностью пытаюсь сделать сам, опираясь на опыт, ищу в интернете и только потом лезу на форум. Спасибо Akina и MIF что помогают разбираться в непростом для меня деле. В данной ветке я задавал вопросы трудностям с 6 запросам, так что не думай что 1 запрос обсасываем 9 страниц Добавлено Цитата Bas @ Не проще(быстрее) функциями это сделать? Может быть. Но база не наша а стороннего ПО. Я просто оттуда дергаю данные. Не хочется ее захламлять своими поделиями, тем более она раз в 3 месяца обновляется. |
Сообщ.
#123
,
|
|
|
use PJM10 declare @d1 date declare @d2 date set @d1='01.01.2018' set @d2='01.02.2018'--GETDATE()+1 Select project.FileAs, count(TaskRequest.id) as 'Количество выполненных задач' From TaskRequest left join Project on Project.ID = TaskRequest.ProjectID where TaskRequest.DueTime >=@d1 and TaskRequest.DueTime<@d2 and (Project.FileAs = 'Задачи ОАиФ' or Project.FileAs ='Задачи Оценка' or Project.FileAs ='Задачи ОКГ' or Project.FileAs like '%АО ОКГ%') and TaskRequest.PercentComplete=1 group by project.FileAs Результат в файле Как-то можно объединить все Project.FileAs like '%АО ОКГ%' в 1 строчку? Или придется делать подзапрос или union all? Прикреплённый файлsql.png (12,01 Кбайт, скачиваний: 720) |
Сообщ.
#124
,
|
|
|
Так ближе:
use PJM10 declare @d1 date declare @d2 date set @d1='01.01.2018' set @d2='01.02.2018'--GETDATE()+1 Select case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end , count(TaskRequest.id) as 'Количество выполненных задач' From TaskRequest left join Project on Project.ID = TaskRequest.ProjectID where TaskRequest.DueTime >=@d1 and TaskRequest.DueTime<@d2 and (Project.FileAs = 'Задачи ОАиФ' or Project.FileAs ='Задачи Оценка' or Project.FileAs ='Задачи ОКГ' or Project.FileAs like '%АО ОКГ%') and TaskRequest.PercentComplete=1 group by project.FileAs Прикреплённый файлsql.png (8,61 Кбайт, скачиваний: 690) Добавлено Он group by project.FileAs не выполняет потому что select самым последним выполняется после сбора таблицы? А нельзя ли как-то прямо в from где-то менять названия? Т.е. тот-же case как в select сделать? Добавлено Так работает, но можно красивее сделать? use PJM10 declare @d1 date declare @d2 date set @d1='01.01.2018' set @d2='01.02.2018'--GETDATE()+1 Select query1.Проект , sum(query1.[Количество выполненных задач]) From( select case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end as Проект, count(TaskRequest.id) as 'Количество выполненных задач' From TaskRequest left join Project on Project.ID = TaskRequest.ProjectID where TaskRequest.DueTime >=@d1 and TaskRequest.DueTime<@d2 and (Project.FileAs = 'Задачи ОАиФ' or Project.FileAs ='Задачи Оценка' or Project.FileAs ='Задачи ОКГ' or Project.FileAs like '%АО ОКГ%') and TaskRequest.PercentComplete=1 group by project.FileAs) as query1 group by Проект |
Сообщ.
#125
,
|
|
|
Select case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end , count(TaskRequest.id) as 'Количество выполненных задач' ..; group by case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end |
Сообщ.
#126
,
|
|
|
Цитата MIF @ group by case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end шикарно |
Сообщ.
#127
,
|
|
|
Как-то можно в поле select, выражение присвоенное через AS ещё раз использовать в том-же Select?
Типа этого: Select Что_то_там As q1, q1*2 as q2 А то у меня выдает ошибку: https://yadi.sk/i/b2aDszRH3UPKaw |
Сообщ.
#128
,
|
|
|
Нельзя. Поле не существует, пока рекордсет не создан.
|
Сообщ.
#129
,
|
|
|
Цитата ^D^ima @ в поле select, выражение присвоенное через AS ещё раз использовать в том-же Select? Зависит от диалекта. Например, в MS Access это делается именно так, как ты пишешь. В MySQL это будет так: Select @q1:=Что_то_там as q1, @q1*2 as q2 В MS SQL... не знаю, можно или нет. И так далее - нестандарт везде свой. |
Сообщ.
#130
,
|
|
|
можно q1 вподзапросе вычислить.
|
Сообщ.
#131
,
|
|
|
Как проще like и in совместить?
Project.ContractNumber like in('ЮК%','АО%','АС%','ЮКПРС%','Б%','Иное ПРС%','ЮК%','СОЮ%','Включение%','ПК%','И%','Л%','М%','Р%','Иное НР%') а то выдает ошибку. Не хочется через or повторять бесконечно Project.ContractNumber like 'ЮК%' or Project.ContractNumber like 'АО%' и.т.д. |
Сообщ.
#132
,
|
|
|
Используй RLike и собери всё в один шаблон.
|
Сообщ.
#133
,
|
|
|
Цитата Akina @ Используй RLike и собери всё в один шаблон. А разве в MS SQL это есть? |
Сообщ.
#134
,
|
|
|
В MS SQL тоже есть регэкспы.
|
Сообщ.
#135
,
|
|
|
Запиши строки поиска в отдельную таблицу.
Добавь JOIN в свой запрос: JOIN MyTable mt ON Project.ContractNumber like mt.MyField Ну и еше надо добавить DISTINCT или GROUP BY, чтобы исключить повторы. |