Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Счетчик (SELECT @TAG FROM TABLE)
|
|||
|---|---|---|---|
|
#18+
Как правильно написать и можно ли вообще???? DECLARE @TAG NUMERIC SELECT @TAG = 0 WHILE (@TAG < 12) BEGIN SELECT @TAG FROM TABLE SELECT @TAG=@TAG+1 END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 15:25 |
|
||
|
Счетчик (SELECT @TAG FROM TABLE)
|
|||
|---|---|---|---|
|
#18+
Что такое SELECT @TAG FROM TABLE Обычно пишут SELECT @TAG=field_name FROM TABLE Но зачем счетчик считывать из таблицы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 15:59 |
|
||
|
Счетчик (SELECT @TAG FROM TABLE)
|
|||
|---|---|---|---|
|
#18+
Я не это имел в виду мне нужно в цикле сделать перебор. У меня в таблице есть поля с названиями 0,1,...,234 и я хочу в цикле сразу все обработать, а не писать 'n' select'ов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 16:35 |
|
||
|
Счетчик (SELECT @TAG FROM TABLE)
|
|||
|---|---|---|---|
|
#18+
Для этого существуют 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 НО прежде чем их использовать - подумайте, может быть можно все-таки можно "сразу все обработать" с помощью запросов ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 16:44 |
|
||
|
Счетчик (SELECT @TAG FROM TABLE)
|
|||
|---|---|---|---|
|
#18+
Я неправильно выразился не поля, а имена полей. Т.е. select 1,2,3,4,5,6,7,8,9,0 from table_name ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 16:51 |
|
||
|
Счетчик (SELECT @TAG FROM TABLE)
|
|||
|---|---|---|---|
|
#18+
Давайте сделаем так - вы опишите стурктуру вашей таблицы с именами и типами полей (а также других, если они будут участвовать в задаче) - можете привести также пример реально хранящихся в ней данных - внятно объясните что значит "обработать" (выбрать/удалить/обновить, данную таблицу/связанную таблицу, ...) Пока могу лишь предположить, что имена полей в вашей таблице имеют вид 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 17:11 |
|
||
|
Счетчик (SELECT @TAG FROM TABLE)
|
|||
|---|---|---|---|
|
#18+
Да может так будет и лучше. Изначально структура таблицы такая: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 17:35 |
|
||
|
Счетчик (SELECT @TAG FROM TABLE)
|
|||
|---|---|---|---|
|
#18+
Про динамические перекрестные запросы на стороне сервера почитайте здесь http://www.sql.ru/articles/article.php?id=153 - IMHO хорошее решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 17:43 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3527&tid=1824805]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 411ms |

| 0 / 0 |
