powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Счетчик (SELECT @TAG FROM TABLE)
9 сообщений из 9, страница 1 из 1
Счетчик (SELECT @TAG FROM TABLE)
    #32018014
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно написать и можно ли вообще????
DECLARE
@TAG NUMERIC
SELECT @TAG = 0
WHILE (@TAG < 12)
BEGIN
SELECT @TAG FROM TABLE
SELECT @TAG=@TAG+1
END
...
Рейтинг: 0 / 0
Счетчик (SELECT @TAG FROM TABLE)
    #32018019
Pandre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что такое
SELECT @TAG FROM TABLE
Обычно пишут
SELECT @TAG=field_name FROM TABLE
Но зачем счетчик считывать из таблицы ?
...
Рейтинг: 0 / 0
Счетчик (SELECT @TAG FROM TABLE)
    #32018022
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не это имел в виду мне нужно в цикле сделать перебор. У меня в таблице есть поля с названиями 0,1,...,234 и я хочу в цикле сразу все обработать, а не писать 'n' select'ов.
...
Рейтинг: 0 / 0
Счетчик (SELECT @TAG FROM TABLE)
    #32018023
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для этого существуют CURSOR-ы


DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
@message varchar(80), @title varchar(80)

PRINT "-------- Utah Authors report --------"

DECLARE authors_cursor CURSOR FOR
SELECT au_id, au_fname, au_lname FROM authors WHERE state = "UT" ORDER BY au_id

OPEN authors_cursor

FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname, @au_lname

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT " "
SELECT @message = "----- Books by Author: " + @au_fname + " " + @au_lname

PRINT @message

-- Get the next author.
FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname, @au_lname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO


НО прежде чем их использовать - подумайте, может быть можно все-таки можно "сразу все обработать" с помощью запросов !
...
Рейтинг: 0 / 0
Счетчик (SELECT @TAG FROM TABLE)
    #32018024
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я неправильно выразился не поля, а имена полей.
Т.е. select 1,2,3,4,5,6,7,8,9,0 from table_name
...
Рейтинг: 0 / 0
Счетчик (SELECT @TAG FROM TABLE)
    #32018026
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте сделаем так
- вы опишите стурктуру вашей таблицы с именами и типами полей (а также других, если они будут участвовать в задаче)
- можете привести также пример реально хранящихся в ней данных
- внятно объясните что значит "обработать" (выбрать/удалить/обновить, данную таблицу/связанную таблицу, ...)

Пока могу лишь предположить, что имена полей в вашей таблице имеют вид field1, field2, field3, ... и вы хотите в цикле выбрать каждое поле, не прописывая явно все запросы

DECLARE @TAG NUMERIC
DECLARE @mysql varchar(8000)
SELECT @TAG = 1
WHILE (@TAG < 12)
BEGIN
SET @mysql = 'SELECT field'+CAST(@TAG AS varchar) + ' FROM mytable'
exec(@mysql)
SELECT @TAG=@TAG+1
END
...
Рейтинг: 0 / 0
Счетчик (SELECT @TAG FROM TABLE)
    #32018028
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да может так будет и лучше.
Изначально структура таблицы такая:
CREATE TABLE [dbo].[FloatLevel_Sut] (
[DateAndTime] [datetime] NULL ,
[Millitm] [smallint] NULL ,
[TagIndex] [smallint] NULL ,
[Val] [float] NULL ,
[Status] [varchar] (1) COLLATE Cyrillic_General_CI_AS NULL ,
[Marker] [varchar] (1) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
Поля [Millitm], [Status], [Marker] не используются.
В конечном итоге мне нужно получить кросс таблицу, типа:

tagindex | DateAndTime | DateAndTime + 2 | DateAndTime + 4 | DateAndTime + 6...
-----------------------------------------------------------------------------------
1 | Val1 | Val2 | Val3 | Val4...

Пользователь выбирает промежуток в 24 часа и в полях DateAndTime | DateAndTime + 2 идет прибавление по 2 часа.
Вот то что я сделал:
if not exists (select * from sysobjects where id = object_id(N'[dbo].[Test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
CREATE TABLE [dbo].[Test] (
[ID] [int] IDENTITY (0, 1) NOT NULL ,
[DateAndTime] [datetime] NULL ,
[0] [float] NULL ,
[float] NULL ,
[float] NULL ,
[float] NULL ,
[float] NULL ,
[5] [float] NULL ,
[6] [float] NULL ,
[7] [float] NULL ,
[8] [float] NULL ,
[9] [float] NULL ,
[10] [float] NULL ,
[11] [float] NULL ,
[12] [float] NULL
) ON [PRIMARY]


INSERT INTO TEST SELECT DateAndTime,
[0] = avg( CASE TagIndex WHEN 0 THEN Val ELSE null END ),
= avg( CASE TagIndex WHEN 1 THEN Val ELSE null END ),
= avg( CASE TagIndex WHEN 2 THEN Val ELSE null END ),
= avg( CASE TagIndex WHEN 3 THEN Val ELSE null END ),
= avg( CASE TagIndex WHEN 4 THEN Val ELSE null END ),
[5] = avg( CASE TagIndex WHEN 5 THEN Val ELSE null END ),
[6] = avg( CASE TagIndex WHEN 6 THEN Val ELSE null END ),
[7] = avg( CASE TagIndex WHEN 7 THEN Val ELSE null END ),
[8] = avg( CASE TagIndex WHEN 8 THEN Val ELSE null END ),
[9] = avg( CASE TagIndex WHEN 9 THEN Val ELSE null END ),
[10] = avg( CASE TagIndex WHEN 10 THEN Val ELSE null END ),
[11] = avg( CASE TagIndex WHEN 11 THEN Val ELSE null END ),
[12] = avg( CASE TagIndex WHEN 12 THEN Val ELSE null END )
FROM FloatLevel_Sut
WHERE DATEANDTIME BETWEEN (GETDATE()) AND (GETDATE() + 1)
GROUP BY DateAndTime
Order By DateAndTime
---------------------------------------------------

DECLARE
@TAG NUMERIC
SELECT @TAG = 0
WHILE (@TAG < 12)
BEGIN
SELECT (GETDATE() - 11) AS TagIndex, Test.[0] AS [0], Test_1.[0] AS , Test_2.[0] AS , Test_3.[0] AS [6], Test_4.[0] AS [8], Test_5.[0] AS [10], Test_6.[0] AS [12], Test_7.[0] AS [14], Test_8.[0] AS [16], Test_9.[0] AS [18], Test_10.[0] AS [20], Test_11.[0] AS [22]
FROM dbo.Test CROSS JOIN
dbo.Test Test_1 CROSS JOIN
dbo.Test Test_2 CROSS JOIN
dbo.Test Test_3 CROSS JOIN
dbo.Test Test_4 CROSS JOIN
dbo.Test Test_5 CROSS JOIN
dbo.Test Test_6 CROSS JOIN
dbo.Test Test_7 CROSS JOIN
dbo.Test Test_8 CROSS JOIN
dbo.Test Test_9 CROSS JOIN
dbo.Test Test_10 CROSS JOIN
dbo.Test Test_11
WHERE (Test_1.ID = 1) AND (Test_2.ID = 2) AND (Test_3.ID = 3) AND (Test_4.ID = 4) AND (Test_5.ID = 5) AND (Test_6.ID = 6) AND (Test_7.ID = 7) AND (Test_8.ID = AND (Test_9.ID = 9) AND (dbo.Test.ID = 0) AND (Test_10.ID = 10) AND (Test_11.ID = 11)
SELECT @TAG = @TAG + 1
END
---------------------------------------------------
--SELECT * FROM TEST
DROP TABLE TEST
...
Рейтинг: 0 / 0
Счетчик (SELECT @TAG FROM TABLE)
    #32018029
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про динамические перекрестные запросы на стороне сервера почитайте здесь
http://www.sql.ru/articles/article.php?id=153 - IMHO хорошее решение
...
Рейтинг: 0 / 0
Счетчик (SELECT @TAG FROM TABLE)
    #32018030
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Счетчик (SELECT @TAG FROM TABLE)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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