Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Большая проблема с UNION / 7 сообщений из 7, страница 1 из 1
08.08.2002, 15:11:26
    #32041874
Zoro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большая проблема с UNION
Есть 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
08.08.2002, 15:22:22
    #32041883
Luchkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большая проблема с UNION
Ну ты довольно странный... С какой стати ОНО должно отрабатывать в новом операторе как будто-бы продолжение пред-предыдущего?
накапливай весь нужный запрос в строке, уж потом его выполняй. Типа так:
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
08.08.2002, 15:24:23
    #32041885
Tulkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большая проблема с UNION
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
08.08.2002, 15:44:20
    #32041891
Zoro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большая проблема с UNION
2LD
А резулдьтат exec(@SQL) будет ли являться результатом самого запроса?
...
Рейтинг: 0 / 0
08.08.2002, 16:03:55
    #32041904
Makc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большая проблема с UNION
Объедини все однотипные таблицы в одну и поставть туда еще одно поле ID-ТогоЧемВсеТакиОниОтличаются.

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

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

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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Большая проблема с UNION / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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