Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нестандартный запрос / 16 сообщений из 16, страница 1 из 1
14.03.2020, 10:46
    #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
14.03.2020, 12:33
    #39937380
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
судя по синтаксису это MS SQL Server?

Модератор: Тема перенесена из форума "MySQL".
...
Рейтинг: 0 / 0
14.03.2020, 14:27
    #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
14.03.2020, 14:38
    #39937401
nullin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
nullin, Полагаю в таблице [FortisDataStore].[dbo].[Clients] кроме [Name] содержится и ещё и [INN], присутствующий [FortisDataStore].[dbo].[Contractors], по которому вы связываете эти две таблицы в первом запросе, т.е. вам при создании таблицы "Заправки за месяц" нужно вытащить [ShortName] из [FortisDataStore].[dbo].[Contractors]
...
Рейтинг: 0 / 0
14.03.2020, 16:58
    #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
14.03.2020, 19:54
    #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
14.03.2020, 19:56
    #39937443
nullin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
Phoca145,
Код: sql
1.
sum( iif( servicetype=3, 1, 0 )) as 'Топливо'
...
Рейтинг: 0 / 0
14.03.2020, 19:57
    #39937445
nullin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
Phoca145, а у вас точно на один [INN] одно [Name]?
...
Рейтинг: 0 / 0
14.03.2020, 20:12
    #39937450
Phoca145
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
nullin, точно на один [INN] одно [Name]. И спасибо вам за помощь!
...
Рейтинг: 0 / 0
14.03.2020, 20:41
    #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
14.03.2020, 20:44
    #39937458
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
Phoca145
aleks222, еще раз все перепроверил, но ругается в этих местах.
Код: sql
1.
 select con.'Месяц' -- ошибка Incorrect syntax near

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

или [column] или "column", в данном случае следуя стилю автора, то лучше скобки.
...
Рейтинг: 0 / 0
15.03.2020, 23:54
    #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
15.03.2020, 23:56
    #39937688
nullin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
alexeyvg, да нет, же, я указал - в двойных
...
Рейтинг: 0 / 0
16.03.2020, 08:28
    #39937717
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
nullin
alexeyvg, да нет, же, я указал - в двойных
Дык я написал, что у автора ошибка, потому что он поля указал в одинарных кавычках.
Ошибка как раз будет Incorrect syntax near 'тут имя поля в одинарных кавычках'.
...
Рейтинг: 0 / 0
16.03.2020, 15:04
    #39937850
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный запрос
я не буду прямо
скажу так
With конечно отличная возможность
но если запрос реально сложный

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

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

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


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