powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Большая проблема с UNION
7 сообщений из 7, страница 1 из 1
Большая проблема с UNION
    #32041874
Zoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 6-7 таблиц в которых хранятся некие записи, сами таблицы однотипны нужно создать запрос типа след

Select @cnt1 = count(*) From Tab1
Select @cnt2 = count(*) From Tab2
Select @cnt3 = count(*) From Tab3
Select @cnt4 = count(*) From Tab4
if @cnt1 > 0
begin
Select ... 'Сбор. Ед' ...
union
Select [набор полей] from Tab1
end
if @cnt2 > 0
begin
if @cnt1 > 0 UNION /*вот эта строка как раз и не отрабатывает*/
Select ... 'Детали' ...
union
Select [набор полей] from Tab2
end
и тд.
У меня есть идеа о лесенке
те
if @cnt1 > 0
Begin
if @cnt2 > 0
Begin
................
End
else
Begin
................
End
End
else
Begin
if @cnt2 > 0
Begin
................
End
else
Begin
................
End
End
в этой ситуации скорость вообщем-то неплохая, но длина кода меня не рабует, и к тому же порядка 128 вариантов готовить
...
Рейтинг: 0 / 0
Большая проблема с UNION
    #32041883
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты довольно странный... С какой стати ОНО должно отрабатывать в новом операторе как будто-бы продолжение пред-предыдущего?
накапливай весь нужный запрос в строке, уж потом его выполняй. Типа так:
declare @sql varchar(1000)
... -- навороты с подсчётом @cnt1...n
set @sql ''
if @cnt1 > 0 begin
if LEN(@sql) > 0 set @sql @sql+' UNION '
set @sql @sql+ 'SELECT Что-то from Кого-то'
end
if @cnt2 > 0 begin
if LEN(@sql) > 0 set @sql @sql+' UNION '
set @sql @sql+ 'SELECT Что-то from Кого-то'
end
-- и выполнить потом всё это
exec(@sql)
...
Рейтинг: 0 / 0
Большая проблема с UNION
    #32041885
Tulkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Select @cnt1 = count(*) From Tab1
Select @cnt2 = count(*) From Tab2
Select @cnt3 = count(*) From Tab3
Select @cnt4 = count(*) From Tab4

Select 'Сбор. Ед' where @cnt1>0
union
select что-то from From Tab1
union
Select 'Детали' where @cnt2>0
union
select что-то from From Tab2
union
Select 'Прещепки' where @cnt3>0
union
select что-то from From Tab3
union
Select 'Мусорные баки' where @cnt4>0
union
select что-то from From Tab4
...
Рейтинг: 0 / 0
Большая проблема с UNION
    #32041891
Zoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2LD
А резулдьтат exec(@SQL) будет ли являться результатом самого запроса?
...
Рейтинг: 0 / 0
Большая проблема с UNION
    #32041904
Makc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объедини все однотипные таблицы в одну и поставть туда еще одно поле ID-ТогоЧемВсеТакиОниОтличаются.

Проблем будет меньше...
...
Рейтинг: 0 / 0
Большая проблема с UNION
    #32041910
Zoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если объеденить однотипные таблицы в одну, кол-во проблем не уменьшится
1. У этих таблиц есть ФорейнКей на Главную таблицу, по которой строится дерево /можно конечно и таблицы "деревьев" тоже объединить, но это не катит/
2. Выход из запроса болжен содержать некоторые строки, наличие которых определяется наличием записей в таблицах след. проблема остается
3. А простое объединение не подходит

отсюда либо вариант "лесенка" либо что-то еще
Если кто-то подскажет как сделать этот запрос через временную таблицу, то буду рад, но нужно предусмотреть возможность одновременного запуска запроса с нескольких компьютеров (до 20 штук)
И я не знаю как именно общаться с временной таблицей /удаляется она после запроса или ее нужно отдельно удалять, если удаляется то сразу или через какоето время и тд и тп/
...
Рейтинг: 0 / 0
Большая проблема с UNION
    #32041911
Tulkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторяю.Читай внимательно.

Select @cnt1 = count(*) From Tab1
Select @cnt2 = count(*) From Tab2
Select @cnt3 = count(*) From Tab3
Select @cnt4 = count(*) From Tab4

Select 'Сбор. Ед' where @cnt1>0
union
select что-то from From Tab1
union
Select 'Детали' where @cnt2>0
union
select что-то from From Tab2
union
Select 'Прещепки' where @cnt3>0
union
select что-то from From Tab3
union
Select 'Мусорные баки' where @cnt4>0
union
select что-то from From Tab4
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Большая проблема с UNION
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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