powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нестандартный запрос
16 сообщений из 16, страница 1 из 1
Нестандартный запрос
    #39937361
Phoca145
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! Можете помочь составить запрос, что вы водил следующие данные скриншот во вложении:

Удалось сделать все кроме, грузов за месяц и кол-во заправок за месяц

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
SELECT DISTINCT 
con.RequestDateTime as 'Дата',
Cs.ShortName as 'Наименование участника', 
U.Email as 'Пользователь', 
CASE WHEN Con.servicetype=2 then 'Да' else 'Нет' END as 'Заявка на подключение сервиса Грузы',
CASE WHEN Con.servicetype=3 then 'Да' else 'Нет' END as 'Заявка на подключение сервиса Топливо',CASE WHEN C.ActivityType=2 then 'Да' else 'Нет' END as 'Наличие договора Грузы',
CASE WHEN C.ActivityType=3 then 'Да' else 'Нет' END as 'Наличие договора Заправки',COUNT(DISTINCT B.ID) as 'Количество ТС'
FROM [PortalFortisIdentity].[dbo].[AspNetUsers] U
JOIN [FortisDataStore].[dbo].[Contractors] Cs ON U.ClientId=Cs.MemberId
JOIN [FortisDataStore].[dbo].[Contracts] C ON Cs.Id=C.ContractorId
JOIN [FortisDataStore].[dbo].[Clients] D on Cs.INN=D.Inn
JOIN [FortisDataStore].[dbo].[Trucks] B ON D.Id=B.ClientId
JOIN [FortisDataStore].[dbo].[ConnectToServiceRequests] as Con on  D.Id=con.ClientId WHERE (U.Email NOT LIKE '%fortis%online%' AND U.Email NOT LIKE '%monopoly.su' AND U.Email NOT LIKE '%[А-яЁё]%' AND U.Email LIKE '%@%') 
AND (U.UpdatedBy!='QuickRegistration' AND U.IsQuickRegistration!='1')
AND C.ActivityType in (2,3) 
AND B.IsClosed='0' AND C.IsClosed='0' AND U.IsClosed=0
AND (((C.FactEndDate>GETDATE() OR C.FactEndDate IS NULL) AND C.AutomaticProlongation IN ('0', '1')) OR C.AutomaticProlongation='2')
and Con.RequestDateTime > '2019-09-01 00:00:00.000' and RequestDateTime < '2020-03-13 23:59:00.000' --период поиска
GROUP BY Cs.ShortName, C.ActivityType, C.Id, U.Email, Con.ServiceType, con.RequestDateTime
order by con.RequestDateTime
SET DEADLOCK_PRIORITY LOW



Грузы за месяц
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT DISTINCT Cts1.ShortName as 'Наименование участника',
Count(Ed1.Id) as 'Количество оформленных заявок на перевозку за данный месяц'
FROM [FortisDataStore].[dbo].[ElectronicDocuments] AS Ed1
JOIN [FortisDataStore].[dbo].[Contracts] as CT1 on Ed1.ContractId = CT1.Id
JOIN [FortisDataStore].[dbo].[Contractors] as Cts1 on CT1.ContractorId = Cts1.Id
WHERE Ed1.ElectronicDocumentStatus in (8,12,14,15) 
and Ed1.CreatedAt > '2020-02-01 00:00:00.000' and Ed1.CreatedAt < '2020-02-29 23:59:00.000'  
GROUP BY Cts1.ShortName



Заправки за месяц
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT DISTINCT Cl.Name as 'Наименование участника', 
COUNT(DISTINCT Tr.ID) as 'Количество заправок за указанный месяц'
FROM [Fuel].[dbo].[Transactions] AS Tr
JOIN [FortisDataStore].[dbo].[Trucks] AS T ON Tr.TruckId=T.Id
JOIN [FortisDataStore].[dbo].[Clients] AS Cl ON Cl.Id=T.ClientId
WHERE Tr.Status = '1' AND      
Tr.RefuelingDate between '2020-02-01 00:00:00.000' and  '2020-02-29 23:59:00.000'                             --период выборки 
GROUP BY Cl.Name



А вот как их объединить ума уже не хватает(
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937380
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
судя по синтаксису это MS SQL Server?

Модератор: Тема перенесена из форума "MySQL".
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937399
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Phoca145,
CTE IdОсновной запрос Cs.ShortNameЗаправки за месяц Cl.NameГрузы за месяц Cts1.ShortName
Где Cs и Cts1 это псевдонимы одной и той же таблицы [FortisDataStore].[dbo].[Contractors]
Cl псевдоним [FortisDataStore].[dbo].[Clients] - вы какое находите соответствие между Name и ShortName? Гадать бесполезно.

И еще, что сразу бросается в глаза:
Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT Cl.Name as 'Наименование участника', 
COUNT(DISTINCT Tr.ID) as 'Количество заправок за указанный месяц'
FROM
...
GROUP BY Cl.Name


Этот distinct не несёт никакого смысла в таблицах "Грузы за месяц" и "Заправки за месяц", в отличии от первой таблицы.
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937401
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nullin, Полагаю в таблице [FortisDataStore].[dbo].[Clients] кроме [Name] содержится и ещё и [INN], присутствующий [FortisDataStore].[dbo].[Contractors], по которому вы связываете эти две таблицы в первом запросе, т.е. вам при создании таблицы "Заправки за месяц" нужно вытащить [ShortName] из [FortisDataStore].[dbo].[Contractors]
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937425
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За такие запросы надо придушить сразу. Шоб не мучился.
Код: sql
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.
declare @dtBeg date = '20190901', @dtEnd date = '2020-03-14';

with con as ( select datepart( month, RequestDateTime) as 'Месяц'
	               , ClientId
	               , sum( iif( servicetype=2, 1, 0 ) as 'Грузы'
	               , sum( iif( servicetype=3, 1, 0 ) as 'Топливо'
                from [FortisDataStore].[dbo].[ConnectToServiceRequests] 
				where @dtBeg <= RequestDateTime and RequestDateTime < @dtEnd --период поиска
				group by ClientId, datepart( month, RequestDateTime)
			)
   , D as ( select * from [FortisDataStore].[dbo].[Clients] where ActivityType in (2,3) AND IsClosed='0'
                                                                  AND (((FactEndDate>GETDATE() OR FactEndDate IS NULL) AND AutomaticProlongation IN ('0', '1')) OR AutomaticProlongation='2')
          )
   , Cs as ( select * from [FortisDataStore].[dbo].[Contractors] )
   , U  as ( select * from [PortalFortisIdentity].[dbo].[AspNetUsers] where IsClosed=0 AND (UpdatedBy!='QuickRegistration' AND IsQuickRegistration!='1') and (Email NOT LIKE '%fortis%online%' AND Email NOT LIKE '%monopoly.su' AND Email NOT LIKE '%[А-яЁё]%' AND Email LIKE '%@%') )
   , C  as ( select * from [FortisDataStore].[dbo].[Contracts] where ActivityType in (2,3) AND IsClosed='0' AND (((FactEndDate>GETDATE() OR FactEndDate IS NULL) AND AutomaticProlongation IN ('0', '1')) OR AutomaticProlongation='2') )
   , B as  ( select ClientId, cnt = COUNT(DISTINCT ID) from [FortisDataStore].[dbo].[Trucks] where IsClosed='0' group by ClientId )
   , G as  ( select C.ContractorId -- Грузы за месяц
                  , datepart( month, ED.CreatedAt) as 'Месяц'
                  , count(ED.Id) as 'Количество оформленных заявок на перевозку за данный месяц'
               FROM [FortisDataStore].[dbo].[ElectronicDocuments] as ED
                    inner join C on C.Id = ED.ContractId 
			   WHERE ED.ElectronicDocumentStatus in (8,12,14,15) 
                     and @dtBeg <= ED.CreatedAt and ED.CreatedAt < @dtEnd  
			   group by C.ContractorId, datepart( month, ED.CreatedAt)
		   )
   select con.'Месяц'
        , Cs.ShortName as 'Наименование участника'
        , U.Email as 'Пользователь'
		, con.'Грузы'
		, con.'Топливо'
		, iif( exists( select * from C where C.ContractorId = Cs.Id and C.ActivityType=2 ), 1, 0) as 'Наличие договора Грузы'
        , iif( exists( select * from C where C.ContractorId = Cs.Id and C.ActivityType=3 ), 1, 0) as 'Наличие договора Заправки'
		, G.'Количество оформленных заявок на перевозку за данный месяц'
		, B.cnt as 'Количество ТС'
     from con
		  inner join D on D.Id = con.ClientId
		  inner join Cs on Cs.INN = D.Inn
		  inner join U on U.ClientId = Cs.MemberId
	      inner join B on b.ClientId = con.ClientId
          left outer join G on G.ContractorId = Cs.Id and G.'Месяц' = con.'Месяц'
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937442
Phoca145
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222, спасибо огромное! Но может просветите меня, я поправил в некоторых местах. Но например, в строках
Код: sql
1.
2.
3.
 , ClientId
	               , sum( iif( servicetype=2, 1, 0 ) as 'Грузы'
	               , sum( iif( servicetype=3, 1, 0 ) as 'Топливо' 



Возникает ошибка Incorrect syntax near, может подскажите в чем дело. Или посоветуйте где можно прочесть.
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937443
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Phoca145,
Код: sql
1.
sum( iif( servicetype=3, 1, 0 )) as 'Топливо'
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937445
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Phoca145, а у вас точно на один [INN] одно [Name]?
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937450
Phoca145
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nullin, точно на один [INN] одно [Name]. И спасибо вам за помощь!
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937455
Phoca145
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222, еще раз все перепроверил, но ругается в этих местах.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 select con.'Месяц' -- ошибка Incorrect syntax near
        , Cs.ShortName as 'Наименование участника'
        , U.Email as 'Пользователь'
		, con.'Грузы' -- ошибка Incorrect syntax near
		, con.'Топливо' --ошибка Incorrect syntax near
		, iif( exists( select * from C where C.ContractorId = Cs.Id and C.ActivityType=2 ), 1, 0) as 'Наличие договора Грузы'
        , iif( exists( select * from C where C.ContractorId = Cs.Id and C.ActivityType=3 ), 1, 0) as 'Наличие договора Заправки'
		, G.'Количество оформленных заявок на перевозку за данный месяц' --ошибка Incorrect syntax near 
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937458
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Phoca145
aleks222, еще раз все перепроверил, но ругается в этих местах.
Код: sql
1.
 select con.'Месяц' -- ошибка Incorrect syntax near

Потому что нельзя писать имена полей в кавычках.
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937664
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, в кавычках то как раз можно

или [column] или "column", в данном случае следуя стилю автора, то лучше скобки.
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937685
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nullin
alexeyvg, в кавычках то как раз можно

или [column] или "column", в данном случае следуя стилю автора, то лучше скобки.
В одинарных?
Код: sql
1.
2.
3.
select o.'name' from sysobjects o
Msg 102, Level 15, State 1, Line 16
Incorrect syntax near 'name'.
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937688
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, да нет, же, я указал - в двойных
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937717
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nullin
alexeyvg, да нет, же, я указал - в двойных
Дык я написал, что у автора ошибка, потому что он поля указал в одинарных кавычках.
Ошибка как раз будет Incorrect syntax near 'тут имя поля в одинарных кавычках'.
...
Рейтинг: 0 / 0
Нестандартный запрос
    #39937850
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не буду прямо
скажу так
With конечно отличная возможность
но если запрос реально сложный

то #tmp таблицы самое то для его упрощения и отладки
особо когда кол-во жойнов за 20 ( и не дай бог там еще функции есть - а у меня бывали такие случаии )

#tmp1
#tmp2
#tmp3 и т.д
гораздо проще потом отловить проблему где она появляется

зы да коненчо это для SP во вью такого не всунешь
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нестандартный запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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