powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизация запроса
16 сообщений из 41, страница 2 из 2
Оптимизация запроса
    #39632076
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или с скля целыми днями не вылазиите
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632081
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисinvmЧингис,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name,
 count(*) as cAB,
 nullif(sum(sum(case when a.Date_pokaz not between '20180101' and '20180201' then 1 else 0)) over (partition by c.kontr_id, c.Strt_id), 0) as ns
from
 T_nach_saldo a join
 V_saldoN b on a.OID = b.mxoid join
 V_ved c on c.ab_kart_oid = b.ab_kart_oid
where
 b.ab_kart_oid between 26808 and 27008
group by
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name;



ругается он

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.
потому что в case -е не хватает end :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name,
 count(*) as cAB,
 nullif(sum(sum(case when a.Date_pokaz not between '20180101' and '20180201' then 1 else 0 end)) over (partition by c.kontr_id, c.Strt_id), 0) as ns
from
 T_nach_saldo a join
 V_saldoN b on a.OID = b.mxoid join
 V_ved c on c.ab_kart_oid = b.ab_kart_oid
where
 b.ab_kart_oid between 26808 and 27008
group by
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name;


а вы бы не копипастили, а осознали б идею и сами писали,
не было бы таких ошибок.
а еще Andy_OLAP -- знатный пустомеля.
но т.к. звенит он тут порядочно, неопытные товарищи вроде вас клюют на сие пустозвонство.
неужели не видите, что он не только в версиях путается и документацию читать не умеет
(о чем ему вообще-то в этой теме несколько разных людей написало),
он еще и свою некомпетентность пытается прикрыть чем угодно?
куда только Гавриленко смотрит...
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632084
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингис, вот этот код

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT     CASE WHEN (CASE WHEN TSMX.Saldo IS NULL THEN SALDOISNULL.saldo ELSE TSMX.Saldo END) > 0 THEN (CASE WHEN TSMX.Saldo IS NULL 
                      THEN SALDOISNULL.saldo ELSE TSMX.Saldo END) END AS DT, CASE WHEN (CASE WHEN TSMX.Saldo IS NULL THEN SALDOISNULL.Saldo ELSE TSMX.Saldo END) 
                      < 0 THEN (CASE WHEN TSMX.Saldo IS NULL THEN SALDOISNULL.Saldo ELSE TSMX.Saldo END) END AS KT, V_ved.Lis_schet
FROM         (SELECT     T_nach_saldo_1.Saldo, T_nach_saldo_1.Ab_kart_oid
                       FROM          (SELECT     MAX(OID) AS min_oid
                                               FROM          T_nach_saldo AS T_nach_saldo_2
                                               GROUP BY Ab_kart_oid) AS tsmin INNER JOIN
                                              T_nach_saldo AS T_nach_saldo_1 ON tsmin.min_oid = T_nach_saldo_1.OID
                       WHERE      (T_nach_saldo_1.Date_pokaz < CONVERT(DATETIME, '2018-04-01 00:00:00', 102))) AS SALDOISNULL RIGHT OUTER JOIN
                      V_ved ON SALDOISNULL.Ab_kart_oid = V_ved.ab_kart_oid LEFT OUTER JOIN
                          (SELECT     T_nach_saldo.Tarif, T_nach_saldo.Saldo, T_nach_saldo.Summa, T_nach_saldo.Date_pokaz, T_nach_saldo.Ab_kart_oid
                            FROM          T_nach_saldo INNER JOIN
                                                       (SELECT     MAX(OID) AS mxoid
                                                         FROM          T_nach_saldo AS T_nach_saldo_1
                                                         GROUP BY Ab_kart_oid) AS tsn ON T_nach_saldo.OID = tsn.mxoid
                            WHERE      (T_nach_saldo.Date_pokaz BETWEEN CONVERT(DATETIME, '2018-04-01 00:00:00', 102) AND CONVERT(DATETIME, '2018-04-17 00:00:00', 102))) 
                      AS TSMX ON V_ved.ab_kart_oid = TSMX.Ab_kart_oid
ORDER BY V_ved.ab_kart_oid
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632085
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123Чингиспропущено...


ругается он

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.
потому что в case -е не хватает end :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name,
 count(*) as cAB,
 nullif(sum(sum(case when a.Date_pokaz not between '20180101' and '20180201' then 1 else 0 end)) over (partition by c.kontr_id, c.Strt_id), 0) as ns
from
 T_nach_saldo a join
 V_saldoN b on a.OID = b.mxoid join
 V_ved c on c.ab_kart_oid = b.ab_kart_oid
where
 b.ab_kart_oid between 26808 and 27008
group by
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name;


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


копи паст быстрее
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632088
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123Чингиспропущено...


ругается он

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.
потому что в case -е не хватает end :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name,
 count(*) as cAB,
 nullif(sum(sum(case when a.Date_pokaz not between '20180101' and '20180201' then 1 else 0 end)) over (partition by c.kontr_id, c.Strt_id), 0) as ns
from
 T_nach_saldo a join
 V_saldoN b on a.OID = b.mxoid join
 V_ved c on c.ab_kart_oid = b.ab_kart_oid
where
 b.ab_kart_oid between 26808 and 27008
group by
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name;


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

шикарно обрабатывает 2-3 сек
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632092
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123а еще Andy_OLAP -- знатный пустомеля.
Анна, таки добрый вечер. Благодарю за термин "знатный", мое отношение к Вам резко поменялось по этой причине в положительную сторону.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632154
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингисили с скля целыми днями не вылазиите
По нику "Чингис", вроде восточный чел., а воспитание хромает.
Было предложено супер решение - респект и уважуха за это.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632217
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPТак может быть, не рекомендовать over, а таки совсем немного подумать и предложить автору темы заскриптовать view и выложить сюда, чтобы сначала сделать group by kontr_id ,Strt_id ,ab_kart_oid, а потом уже присоединять справочники.Думать никогда не вредит. Особенно о том, что оптимизатор писали люди уж всяко не глупее себя любимого.
Специально для Andy_OLAP для изучения и осознания
Код: 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.
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.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
use tempdb;
go

create table dbo.r1 (r1_id int identity primary key, r1_Name varchar(200));
create table dbo.r2 (r2_id int identity primary key, r2_Name varchar(200));
create table dbo.r3 (r3_id int identity primary key, r3_Name varchar(200));
create table dbo.t (id int identity primary key, r1_id int not null references dbo.r1 (r1_id), r2_id int not null references dbo.r2 (r2_id), r3_id int not null references dbo.r3 (r3_id), v int);

insert into dbo.r1
 (r1_Name)
 select top (10)
  replicate(cast(newid() as varchar(36)), 5)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.r2
 (r2_Name)
 select top (20)
  replicate(cast(newid() as varchar(36)), 5)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.r3
 (r3_Name)
 select top (30)
  replicate(cast(newid() as varchar(36)), 5)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.t
 (r1_id, r2_id, r3_id, v)
 select top (500000)
  rand(checksum(newid())) * 10 + 1,
  rand(checksum(newid())) * 20 + 1,
  rand(checksum(newid())) * 30 + 1,
  1
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;
go

declare @r1_Name varchar(200), @r2_Name varchar(200), @r3_Name varchar(200), @v int, @id uniqueidentifier, @q nvarchar(max);
declare @r table (row_order int identity, id uniqueidentifier primary key, descr varchar(100), m as '/*' + cast(id as varchar(36)) + '*/');

select @id = newid();
insert into @r values (@id, 'group by r1.r1_Name, r2.r2_Name, r3.r3_Name');

select @q = N'/*' + cast(@id as nvarchar(36)) + N'*/' +
N'declare @r1_Name varchar(200), @r2_Name varchar(200), @r3_Name varchar(200), @v int;

select
 @r1_Name = r1.r1_Name, @r2_Name = r2.r2_Name, @r3_Name = r3.r3_Name, @v = sum(v)
from
 dbo.t join
 dbo.r1 on r1.r1_id = t.r1_id join
 dbo.r2 on r2.r2_id = t.r2_id join
 dbo.r3 on r3.r3_id = t.r3_id
group by
 r1.r1_Name, r2.r2_Name, r3.r3_Name
option
 (maxdop 1);';

exec sp_executesql @q;

select @id = newid();
insert into @r values (@id, 'group by t.r1_id, t.r2_id, t.r3_id, r1.r1_Name, r2.r2_Name, r3.r3_Name');

select @q = N'/*' + cast(@id as nvarchar(36)) + N'*/' +
N'declare @r1_Name varchar(200), @r2_Name varchar(200), @r3_Name varchar(200), @v int;

select
 @r1_Name = r1.r1_Name, @r2_Name = r2.r2_Name, @r3_Name = r3.r3_Name, @v = sum(v)
from
 dbo.t join
 dbo.r1 on r1.r1_id = t.r1_id join
 dbo.r2 on r2.r2_id = t.r2_id join
 dbo.r3 on r3.r3_id = t.r3_id
group by
 t.r1_id, t.r2_id, t.r3_id, r1.r1_Name, r2.r2_Name, r3.r3_Name
option
 (maxdop 1);';

exec sp_executesql @q;

select @id = newid();
insert into @r values (@id, 'joins outside the group by');

select @q = N'/*' + cast(@id as nvarchar(36)) + N'*/' +
N'declare @r1_Name varchar(200), @r2_Name varchar(200), @r3_Name varchar(200), @v int;

select
 @r1_Name = r1.r1_Name, @r2_Name = r2.r2_Name, @r3_Name = r3.r3_Name, @v = t.v
from
 (select r1_id, r2_id, r3_id, sum(v) as v from dbo.t group by r1_id, r2_id, r3_id) t join
 dbo.r1 on r1.r1_id = t.r1_id join
 dbo.r2 on r2.r2_id = t.r2_id join
 dbo.r3 on r3.r3_id = t.r3_id
option
 (maxdop 1);';

exec sp_executesql @q;

alter table dbo.r1 add unique (r1_Name);
alter table dbo.r2 add unique (r2_Name);
alter table dbo.r3 add unique (r3_Name);

select @id = newid();
insert into @r values (@id, 'group by r1.r1_Name, r2.r2_Name, r3.r3_Name + unique constraints');

select @q = N'/*' + cast(@id as nvarchar(36)) + N'*/' +
N'declare @r1_Name varchar(200), @r2_Name varchar(200), @r3_Name varchar(200), @v int;

select
 @r1_Name = r1.r1_Name, @r2_Name = r2.r2_Name, @r3_Name = r3.r3_Name, @v = sum(v)
from
 dbo.t join
 dbo.r1 on r1.r1_id = t.r1_id join
 dbo.r2 on r2.r2_id = t.r2_id join
 dbo.r3 on r3.r3_id = t.r3_id
group by
 r1.r1_Name, r2.r2_Name, r3.r3_Name
option
 (maxdop 1);';

exec sp_executesql @q;

select
 r.descr, qs.last_elapsed_time, qs.last_logical_reads, qp.query_plan
from
 sys.dm_exec_query_stats qs cross apply
 sys.dm_exec_query_plan(qs.plan_handle) qp cross apply
 sys.dm_exec_sql_text(qs.sql_handle) t join
 @r r on t.Text like '%' + r.m + '%'
order by
 r.row_order;
go

drop table dbo.t, dbo.r1, dbo.r2, dbo.r3;
go


descrlast_elapsed_timelast_logical_readsgroup by r1.r1_Name, r2.r2_Name, r3.r3_Name48577576240group by t.r1_id, t.r2_id, t.r3_id, r1.r1_Name, r2.r2_Name, r3.r3_Name1965432677joins outside the group by1915102677group by r1.r1_Name, r2.r2_Name, r3.r3_Name + unique constraints1958512677
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632264
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmAndy_OLAPпоймите правильно - в официальной документации на OVER есть упоминание, что работает начиная с 2008-й версии.Вам следует знать, что в актуальной документации не упоминаются версии, снятые с поддержки.
Для таких версий есть отдельная документация . В которой легко находится желаемое .Там нет даже SQL 2000 !! Это несерьёзно! ©
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632340
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmСпециально для Andy_OLAP для изучения и осознания

И это всё мне? Ой-вей, я обязательно изучу когда-нибудь Ваш пример. Огромное спасибо за Ваш вклад в дело изучения MSSQL и повышения квалификации участников форума!
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632355
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисAndy_OLAP,

скиньте мне литературу
я оказ ограничился только Мартином Грубером
Вам литературу, которую читают SQL разработчики, когда хотят понять, что делать с запросом?
Да пожалуйста , вот классический вариант.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632436
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPИ это всё мне? Ой-вей, я обязательно изучу когда-нибудь Ваш пример. Огромное спасибо за Ваш вклад в дело изучения MSSQL и повышения квалификации участников форума!Дожили до солидного возраста, а ерничаете как дите малое.
Видимо солидный возраст такая же сказка как и все остальное от вас исходящее?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632442
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Да нет, это характер.
У меня есть один родственник, который НИКОГДА, НИ РАЗУ, не говорил, что я был не прав или ошибался и т.д. До него очень долго что либо доходит, когда начинаешь ему что либо обьснять или говорить что он был не прав или как надо было сделать, он начинает уходить совершенно на другую никак не связанную тему, если будешь упорствовать, то начнется агрессия. Потом когда его мозг это переварит, ты оказываешся виноватым, т.к. не так обьснял, быстро говорил и т.д.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632447
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrovinvm,

Да нет, это характер.
У меня есть один родственник, который НИКОГДА, НИ РАЗУ, не говорил, что я был не прав или ошибался и т.д. До него очень долго что либо доходит, когда начинаешь ему что либо обьснять или говорить что он был не прав или как надо было сделать, он начинает уходить совершенно на другую никак не связанную тему, если будешь упорствовать, то начнется агрессия. Потом когда его мозг это переварит, ты оказываешся виноватым, т.к. не так обьснял, быстро говорил и т.д.
а википедии написано по другому
авторслово, скрывающее под собой некую идеальную форму глупости, нелепости или непонимания человеком своего места.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632452
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Пошел гуглить что это за слово, думал будет что нибудь умное от латыни, а тут оказалось простое, но от этого не менее многосторонее слво :)
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632472
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPИ это всё мне? Ой-вей, я обязательно изучу когда-нибудь Ваш пример. Огромное спасибо за Ваш вклад в дело изучения MSSQL и повышения квалификации участников форума!
господи, ну себя в очередной раз по полной программе посмешищем выставил,
и этого не понимает, черт с ним.
но как не стыдно вместо благодарности
действительно эксперту и настоящему спецу своего дела
высказывать подобное?
абсолютно бесстыжее троллевидное создание,
скажи спасибо invm , который попросил меня попридержать помои,
чтобы не спугнуть главного клоуна,
без которого на форуме станет жутко скучно.
осознай, Гавриленко-то тебя не усмиряет только для того,
чтобы форум травой от скуки не порос
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизация запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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