powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подзапрос в UNION
11 сообщений из 36, страница 2 из 2
Подзапрос в UNION
    #38765691
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну как же нет описания задачи? Вот оно было уже в виде первичного решения:
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


Куда уж конкретнее. Вопрос тоже обозначен: можно ли не выполнять Z несколько раз, а использовать результат один раз без временной таблицы?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765692
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Куда уж конкретнее. Вопрос тоже обозначен: можно ли не выполнять Z несколько раз, а использовать результат один раз без временной таблицы?
Ответ тоже конкрентнее некуда - никак.
Только это ответ на выбранный вами способ решения неизвестной задачи.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765695
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
Займитесь какими-нибудь другими темами.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765696
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265,

знаете, вы когда к доктору приходите, так же поступаете -
на предложение раздеться, для осмотра, закатываете один рукав, а когда доктор говорит, что в таком случае ему проблематично провести правильную диагностику и назначить лечение, вы ему говорите что он хамло и бездарность?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38765699
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Glory,
Займитесь какими-нибудь другими темами.
Помедитируй в одиночестве. Дня три.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38769959
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как только появилась возможность публикую окончательное решение задачи, которое позволяет ускорить первоначальный способ в несколько раз. И которое не требует явного определения для таблицы-результата.
"Принципиальная схема" основана на использовании временных таблиц ## ( а.они позволяют сохранять в них записи без предварительной декларации; б.##, а не # т.к. последние прекращают свое существование после окончания процедуры, а нам нужен результат и после окончания процедуры). Вот схема:
1. Создаем процедуру (не функцию, т.к. последняя для возврата результата требует явной декларации таблицы. И еще важно: в функциях невозможно использование временных таблиц, а в процедурах - допустимо)
2. Исполняем нужный "тяжелый" запрос Z0 и сохраняем его в ##T1 примерно так:
Код: sql
1.
2.
3.
SELECT Z0.* INTO ##Z FROM 
(
SELECT тра-та-та) as Z0


3. Окончательный результат формируем в этой же процедуреи сохраняем в другую временную таблицу примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
                     SELECT Z1.* INTO ##ZZ FROM 
(select A1, A2, B1 from ##Z
UNION ALL
   select A1, NULL, B1 FROM ##Z GROUP BY A1, B1
UNION ALL
   select A1, A2, NULL FROM ##Z GROUP BY A1, A2) AS Z1


4. Удаляем теперь как ненужную первую временную таблицу ##Z:
Код: sql
1.
	drop table ##Z

и завершаем процедуру
5. Теперь ее следует просто вызывать из любого приложения. Например, из свойств внешнего подключения Excel такими образом:
Код: sql
1.
2.
3.
EXEC [Процедура] Параметр1 Параметр2
select * from ##ZZ
drop table ##ZZ


Конечно опущены всякие детали и проверки.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38769968
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Конечно опущены всякие детали и проверки.
например, одновременный запуск из двух коннектов
Инитресно будет понаблюдать за их "борьбой" по созданию и удалению общей таблицы.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38769972
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265, а ROLLUP так и не был осилен или чем-то не устроил?
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38769995
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,
Спасибо за предложение. Честно говоря, "руки не дошли" разобраться.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38770453
serg0265
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,
Вы сподвигли меня проанализировать это решение.
Но конкретно в моем случае оно оказалось неприменимо из-за более сложной логики консолидации подзапросов.
Хотя если бы сложилось, то это решение было бы более изящным.
Решение же с временными таблицами - более универсально.
...
Рейтинг: 0 / 0
Подзапрос в UNION
    #38770462
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg0265Но конкретно в моем случае оно оказалось неприменимо из-за более сложной логики консолидации подзапросов.
Потому, что вы пребываете в уверенности, что ваш способ единственный для решения задачи. Которую вы держите в секрете
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подзапрос в UNION
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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