Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Агрегатные функции на строку / 6 сообщений из 6, страница 1 из 1
27.09.2002, 08:47:14
    #32053512
SK1
SK1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Агрегатные функции на строку
Здравствуйте, All

Подскажите пожалуйста, есть ли какие-нибудь средства для вычисления, например, sum вдоль строки (как в Excel-е :) Например, мне нужно удалить все строки, состоящие из одних 0. Проблема в том, что временная таблица генерится в ХП и имеет переменное количество столбцов:
Код: plaintext
1.
2.
set @Tmp_Command = 'alter table #ttt add ['+@Col_Name+'] '+
                   'int not null default 0'
exec (@Tmp_Command)

И еще, можно ли результирующим select-ом вернуть не все столбцы, а, скажем, со 2 по 5, или все, кроме 1-го?

SQL v.7

Спасибо.
...
Рейтинг: 0 / 0
27.09.2002, 09:23:01
    #32053522
Bzzzzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Агрегатные функции на строку
Раз имена полей генерятся самой процедурой - сохранять их в доп.темповой табле. Из нее надергать в переменную как-нить типа так:

select @CmdStr = 'delete from #ttt where '
while @i > 0
select @CmdStr +
ColName from #TExtTable where ID = @i +
' = 0 and '
select @i = @i+1
@CmdStr = @CmdStr + '1 = 1'
exec (@CmdStr)

Аналогично и сумму....
...
Рейтинг: 0 / 0
27.09.2002, 10:07:51
    #32053544
SK1
SK1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Агрегатные функции на строку
Спасибо, идея понятна
...
Рейтинг: 0 / 0
27.09.2002, 11:49:49
    #32053597
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Агрегатные функции на строку
Вот примерно то, что Вам нужно:
Код: plaintext
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.
 /*
здесь таблица создается, к ней добавляются колонки,
инсертятся записи и т.д.
*/ 

create table #ttt
(
	pk int identity( 1 , 1 ) not null,
	col1 int not null,
	col2 int not null,
	col3 int not null,
	col4 int not null
)

insert into #ttt (col1,col2,col3,col4) values ( 0 , 0 , 0 , 0 )
insert into #ttt (col1,col2,col3,col4) values ( 1 , 0 , 0 , 0 )
insert into #ttt (col1,col2,col3,col4) values ( 0 , 0 , 0 , 0 )
insert into #ttt (col1,col2,col3,col4) values ( 0 , 1 , 0 , 0 )
insert into #ttt (col1,col2,col3,col4) values ( 0 , 0 , 0 , 0 )
insert into #ttt (col1,col2,col3,col4) values ( 0 , 0 , 1 , 0 )
insert into #ttt (col1,col2,col3,col4) values ( 0 , 0 , 0 , 0 )
insert into #ttt (col1,col2,col3,col4) values ( 0 , 0 , 0 , 1 )
insert into #ttt (col1,col2,col3,col4) values ( 0 , 0 , 0 , 0 )
insert into #ttt (col1,col2,col3,col4) values ( 0 , 0 , 0 , 0 )

Select * from #ttt
 -------------------------------------------------------
 

 /*
В @TableName хранится имя таблицы,
в @PosFrom и @PosTo - границы позиций
интересующих нас колонок
*/ 

DECLARE @TableName sysname, @PosFrom int, @PosTo int
Set @TableName='#ttt'
Set @PosFrom= 2 
Set @PosTo= 5 


DECLARE @SQL nvarchar( 4000 )

Set @SQL='Delete from '+@TableName+' where 0'
Select 
	@SQL=@SQL+'+'+column_name
from 
	tempdb.INFORMATION_SCHEMA.Columns cols 
	inner join tempdb..sysobjects sys 
		on  sys.name=cols.table_name 
where 
	sys.id=object_id('tempdb..#ttt') and
	ORDINAL_POSITION BETWEEN  2  AND  5 

Set @SQL=@SQL+'=0'

exec(@SQL)

Select * from #ttt

drop table #ttt


С уважением,
Александр Степанов
...
Рейтинг: 0 / 0
27.09.2002, 12:46:32
    #32053626
SK1
SK1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Агрегатные функции на строку
Спасибо, Алексанр.
Попробую разобраться как это работает. Я не силен в работе с системными объектами, поэтому придется сначала изучить их. К сожалению, присланный Вами пример у меня не сработал (select @SQL, вставленный перед exec(@SQL) показывает, что @SQL='Delete from #ttt where 0=0'), но все равно спасибо за ответ, дальше буду разбираться сам.

Сергей
...
Рейтинг: 0 / 0
27.09.2002, 13:09:46
    #32053645
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Агрегатные функции на строку
To SK1

Это значит, что в Вашей таблице не оказалось полей, "порядковые номера" которых были бы в границах между @PosFrom и @PosTo. Чтобы exec-ом не удалялись все записи из таблицы в этом случае, можно заменить
Код: plaintext
1.
2.
3.
Set @SQL=@SQL+'=0'

exec(@SQL)

на
Код: plaintext
1.
2.
3.
4.
5.
6.
If @@RowCount> 0 
	Set @SQL=@SQL+'=0'
ELSE
	Set @SQL='Select ''Требуемый набор полей для удаления отсутствует!'''

exec(@SQL)


Конечно, пример придется доработать - ведь только Вам известны все нюансы требуемого решения.

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


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