powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Агрегатные функции на строку
6 сообщений из 6, страница 1 из 1
Агрегатные функции на строку
    #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
Агрегатные функции на строку
    #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
Агрегатные функции на строку
    #32053544
SK1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SK1
Гость
Спасибо, идея понятна
...
Рейтинг: 0 / 0
Агрегатные функции на строку
    #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
Агрегатные функции на строку
    #32053626
SK1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SK1
Гость
Спасибо, Алексанр.
Попробую разобраться как это работает. Я не силен в работе с системными объектами, поэтому придется сначала изучить их. К сожалению, присланный Вами пример у меня не сработал (select @SQL, вставленный перед exec(@SQL) показывает, что @SQL='Delete from #ttt where 0=0'), но все равно спасибо за ответ, дальше буду разбираться сам.

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


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