powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подзапрос в UNION
25 сообщений из 36, страница 1 из 2
Подзапрос в UNION
    #38764866
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите возможно ли добавить к результату подзапросов Z0 и Z1 строки, которые суть - результат их группировки по некоторым признакам. Количество и содержание полей воспроизвести - конечно не проблема. А вот итоги...
Полагаю, что это можно сделать с помощью UNION. И вроде бы возникает рекурсия.
Зачем такая заморочка? Потому Z1 долго выполняется и не хочется его запускать второй раз для получения результата группировки.
ЭСКИЗ с неправильным синтаксисом:
Код: sql
1.
2.
3.
4.
5.
(select A1, A2, B1 from Z0
UNION ALL
select A1, A2, B1 from Z1) AS Z --- Здесь на самом деле большой запрос, который долго выполняется.
UNION ALL
select A1, NULL, B1 from Z GROUP BY A1, B1
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764869
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Подскажите возможно ли добавить к результату подзапросов Z0 и Z1 строки, которые суть - результат их группировки по некоторым признакам.
Что мешает попробовать ?
С соблюдением синтаксиса

serg0265А вот итоги...
Изучить WITH ROLLUP
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764891
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
Сам не пойму, почему-то не принимает интерпретатор SQL Managment Studio 2008. Сейчас Z завернут в функцию одного оператора, к которому добавил приведенный "хвостик", начиная с AS. Без "хвостика" - все Ок проходит.
Вот что вижу (см.вложение) и текст:
"Msg 156, Level 15, State 1, Procedure f_MTR, Line 281
Incorrect syntax near the keyword 'as'."
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764895
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265И вроде бы возникает рекурсияОткуда ей взяться без рекурсивного CTE?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764896
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Вот что вижу (см.вложение) и текст:
А вы еще поменьше фрагмент кода в скриншоте можете сделать ?
Чтобы интереснее было угадывать
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764909
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
А вы обратили внимание на количество строк в сообщении об ошибке?
Возможно тогда не предлагали бы выложить всю процедуру здесь.
Или как?
Чего не хватает кроме того, что описано и чтобы составить мнение?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764912
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265А вы обратили внимание на количество строк в сообщении об ошибке?
А вы не умеет создавать _тестовые_ запросы ?
Где меньше строк, но соблюдается принцип
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764914
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
Приходилось.
У вас будут конкретные предложения или будете дальше "мозг компостировать"?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764915
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265У вас будут конкретные предложения или будете дальше "мозг компостировать"?
Изучите синтаксис и соблюдайте его.
Или наймите того, кто знает синтаксис и соблюдает его.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764917
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
Понятно. "Спасибо" за помощь. Подождем других знатоков.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764940
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Glory,
Понятно. "Спасибо" за помощь. Подождем других знатоков.Код показывайте или идите на форум, где по фотографиям лечат.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764945
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот как надо оформлять в SQL решение. Может кому пригодится:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
with Z as
   (select A1, A2, B1 from Z0
   UNION ALL
   select A1, A2, B1 from Z1)
 
   select A1, A2, B1 from Z
UNION ALL
   select A1, NULL, B1 FROM Z GROUP BY A1, B1
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764948
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265, и оно так выполняется быстрее чем два отдельных запроса - с группировкой и без?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764952
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Вот как надо оформлять в SQL решение
Неужели вы справились ?
А когда планируете начать изучение WITH ROLLUP ?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764962
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
Напоследок совет: поучитесь хорошим манерам. Особенно когда приходят за помощью. Для этого и предназначен форум.
А то только "воздух портите".
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38764976
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Напоследок совет: поучитесь хорошим манерам.
А вы что являетесь сертифицированным носителем "хороших манер" ?
Или все, что делаете вы, автоматически считается хорошими манерами ?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765006
virtuOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Glory]serg0265serg0265А вот итоги...
Изучить WITH ROLLUP

Вау, я и не подозревал о таких возможностях. Полтора года работаю с sql, и в подобной ситуации агрегировал либо в отчётной системе, либо через времянки.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765012
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет ROLLUP пишут, мол, будет удалена.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765021
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовНасчет ROLLUP пишут, мол, будет удалена.Зато
GROUP BY (Transact-SQL)<grouping set item> ::=
<simple group by item>
| <rollup spec>
| <cube spec>

<grouping set item list> ::=
<grouping set item> [ ,...n ]

Non-ISO-Compliant Syntax
[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
[ WITH { CUBE | ROLLUP } ]
] http://msdn.microsoft.com/ru-ru/library/ms177673(v=sql.100).aspx
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765025
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовНасчет ROLLUP пишут, мол, будет удалена.
Не вижу, что удалят
Вижу "Предложение GROUP BY имеет два синтаксиса: совместимый с ISO и несовместимый с ISO"
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765033
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryВладислав КолосовНасчет ROLLUP пишут, мол, будет удалена.
Не вижу, что удалят
Вижу "Предложение GROUP BY имеет два синтаксиса: совместимый с ISO и несовместимый с ISO"

ниже есть. не-исо предполагают когда-нибудь удалить.
WITH ROLLUP
В будущей версии Microsoft SQL Server эта возможность будет удалена.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765038
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dawGloryпропущено...

Не вижу, что удалят
Вижу "Предложение GROUP BY имеет два синтаксиса: совместимый с ISO и несовместимый с ISO"

ниже есть. не-исо предполагают когда-нибудь удалить.
WITH ROLLUP
В будущей версии Microsoft SQL Server эта возможность будет удалена.

Ну так надо просто использовать ISO стандарт.
Результат то тот же будет.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765680
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжу топик, т.к. выяснилось, что найденное решение - возможно, но не оптимально. Оно не исполняет объявленного в начале требования: "Потому Z1 долго выполняется и не хочется его запускать второй раз для получения результата группировки.".
Так вот сейчас время исполнения объединения в решении умножилось почти в 3 раза. Так понимаю, что из приведенной декларации не следует оптимизация: однократное выполнение "тяжелого" подзапроса и последующее использование результата в остальных компонентах UNION. А следует только декларация, которая тупо подставляется при исполнении, умножая время исполнения исходника.
Вы скажете, используй временную таблицу. Но тогда невозможно будет "завернуть" все в inline функцию, а только multiline. Это в свою очередь неудобно по другой причине: для multiline надо точно декларировать состав, порядок и тип всех полей результата. А сейчас в результате - десятки столбцов, состав и определение которых постоянно меняются. Короче гимор! Потому inline - удобнее.
И вообще, мне не понятно, почему имеет место противоречие в допущениях языка T-SQL: в inline не надо определять результат, а в multiline - обязательно. Почему бы не допустить это для некоторых ситуаций? Так удобнее было бы.
Короче тема и задача остаются открытыми. Есть ли способ остаться "в рамках" inline? Если ли вообще решение при указанных условиях?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765684
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Короче тема и задача остаются открытыми.
Мало того, они остаются вообще неизвестными.
Потому что вы рассказывает про выбранный вами способ решения задачи, а не про саму задачу.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765688
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну как же нет описания задачи? Вот оно было уже в виде первичного решения:serg0265Вот как надо оформлять в SQL решение. Может кому пригодится:
Код: sql
1.
2.
3.
4.
5.
6.
with Z as
   (select A1, A2, B1 from Z0
   UNION ALL
   select A1, A2, B1 from Z1)
 
   select A1, A2, B1 from Z


Куда уж конкретнее. Вопрос тоже обозначен: можно ли не выполнять Z несколько раз, а использовать результат один раз без временной таблицы?
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подзапрос в UNION
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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