powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / перейти к строке таблицы по номеру
18 сообщений из 18, страница 1 из 1
перейти к строке таблицы по номеру
    #39832508
LanaRix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть таблица в базе, я собираюсь пройти по всем строчкам, и для каждой выполнить определенный набор действий. проблема возникает в том, что мне нужно обратиться к строке по ее номеру:
Код: sql
1.
2.
3.
4.
5.
set @count = (SELECT COUNT(*) FROM AUDITORIUM);
while @i<=@count
begin
	if ((Select AUDITORIUM.LOCATION_ID from AUDITORIUM where ROW_NUMBER() =@i) is not null)
...



в строке условия ROW_NUMBER() =@i выдает ошибку. Как тут написать правильно?
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832511
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на курсор
Примерно так:
Код: sql
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.
use master
GO

IF OBJECT_ID(N'tempdb..#TEST',N'U')IS NOT NULL
  DROP TABLE tempdb..#TEST;
CREATE TABLE #TEST
(
  ID TINYINT NOT NULL,
  VALUE VARCHAR(5)NOT NULL
)  
INSERT #TEST(ID,VALUE)
 VALUES(1,'A'),(2,'B'),(3,'C'),(4,'D');

DECLARE @InID TINYINT;
DECLARE @InValue VARCHAR(5);

SET @InID=0;
SET @InValue='';

DECLARE cCursor CURSOR LOCAL FAST_FORWARD FOR
 SELECT ID,VALUE FROM #TEST;
OPEN cCursor;
FETCH NEXT FROM cCursor INTO @InId,@InValue;
WHILE @@FETCH_STATUS=0
 BEGIN
  --здесь обработка записей. для примера просто PRINT
  PRINT 'ID= '+CAST(@InID AS VARCHAR(1));

  --конец обработки
  SET @InID=0;
  SET @InValue='';
  FETCH NEXT FROM cCursor INTO @InId,@InValue;
 END
CLOSE cCursor;
DEALLOCATE cCursor; 
   
 
DROP TABLE #TEST; 
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832527
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRix,

У записи нет номера, но может быть ключ, по которому и надо обращаться.
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832541
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRixУ меня есть таблица в базе, я собираюсь пройти по всем строчкам, и для каждой выполнить определенный набор действий. Отвыкайте от курсорно-алгоритмической логики мышления. Переходите на декларативную...
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832634
LanaRix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Анна, я не против, только как это сделать? мне нужно в задании посчитать сумму всех значений столбца, у которых указано определенное значение другого столбца. но этот второй столбец в другой таблице, а между таблицами связь по внешнему ключу. вот и прохожу по циклу, в котором из одной таблицы беру id внешнего ключа и проверяю, что там в другой таблице. тут только по всем строкам проходить, другого варианта нет (по крайней мере сама не нашла ничего подходящего)
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832637
LanaRix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
londinium,
только тут черт ногу переломит, я это видела, потому и спросила, что ничего не понятно.
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832640
LanaRix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич, я не знаю, какие именно ключи брать. мне и нужно узнать в цикле, какие записи проходят, а какие нет. а по id листать смысла нет, они могут и не в порядке возрастания идти, и с пропусками (1, 2, 4...)
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832641
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRixЩукина Анна, я не против, только как это сделать? мне нужно в задании посчитать сумму всех значений столбца, у которых указано определенное значение другого столбца. но этот второй столбец в другой таблице, а между таблицами связь по внешнему ключу. вот и прохожу по циклу, в котором из одной таблицы беру id внешнего ключа и проверяю, что там в другой таблице. тут только по всем строкам проходить, другого варианта нет (по крайней мере сама не нашла ничего подходящего)

вы не своими словами объясняйте, что делать хотите, а саму задачу сюда пишите и все скрипты участвующих таблиц и их наполнерие и желаемый результат
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832642
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRixГавриленко Сергей Алексеевич, я не знаю, какие именно ключи братьТе, которые однозначно идентифицируют запись.
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832649
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соединять в запросе первую таблицу и подзапрос, в котором агрегация по полям для поиска в другой
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832652
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri AbeleСоединять в запросе первую таблицу и подзапрос, в котором агрегация по полям для поиска в другой

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
    FirstTable.*,
    SubQueryToSecondTable.*
FROM
    FirstTable T1
    LEFT OUTER JOIN (
        SELECT ID, CNT=COUNT(*)
        FROM SecondTable
        GROUP BY KeyField
    ) T2 ON T1.T2_ID = T2.ID
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832653
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
    FirstTable.*,
    SubQueryToSecondTable.*
FROM
    FirstTable T1
    LEFT OUTER JOIN (
        SELECT ID, CNT=COUNT(*)
        FROM SecondTable
        GROUP BY ID
    ) T2 ON T1.T2_ID = T2.ID

[/quote]
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832658
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRixмне нужно в задании посчитать сумму всех значений столбца, у которых указано определенное значение другого столбца. но этот второй столбец в другой таблице, а между таблицами связь по внешнему ключу. вот и прохожу по циклу, в котором из одной таблицы беру id внешнего ключа и проверяю, что там в другой таблице. тут только по всем строкам проходить, другого варианта нет (по крайней мере сама не нашла ничего подходящего)Нужно использовать оператор JOIN - связь таблиц друг с другом, в запросе.

Например:
Код: sql
1.
2.
3.
4.
select t1.столбец, sum(t2.значение)
from [одна таблица] as t1
    join [другая таблица] as t2 on t2.[внешний ключ] = t1.id
group by t1.столбец


LanaRixони могут и не в порядке возрастания идти, и с пропусками (1, 2, 4...)Записи в базе навалены кучей на диске, нету там никакого порядка, это не таблички в эквеле.

Таблицы в базе данных - это "множества", а язык SQL - язык, задающий операции над множествами - пересечение, объединение, и так далее, и выдающий готовый результат, без всяких "листаний страниц", которых в базах тоже нету, как и "порядка"
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832662
LanaRix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
londinium,
в принципе, если в документации посидеть подольше, то можно разобраться
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832716
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRixlondinium,
в принципе, если в документации посидеть подольше, то можно разобраться
зачем? тут на форуме куча бездельников, выложат все на блюдечке
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832948
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRixlondinium,
в принципе, если в документации посидеть подольше, то можно разобраться

почитайте про ROW_NUMBER() и не только в документации

эта функция нумерации выборки - сначала делается выборка from ... where, а потом результат нумеруется.
соответственно вы не можете использовать эту функцию как условие where.
ищите другой подход для вашей задачи
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832996
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRixмне нужно посчитать сумму всех значений столбца, у которых указано определенное значение другого столбца. но этот второй столбец в другой таблице читать про SUM (бонусом и за GROUP BY почитайте), JOIN, WHERE. "Чистый" SQL, чистая декларация. Никаких алгоритмов и циклов...
...
Рейтинг: 0 / 0
перейти к строке таблицы по номеру
    #39832997
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LanaRixмне нужно посчитать сумму всех значений столбца, у которых указано определенное значение другого столбца. но этот второй столбец в другой таблице как вариант - JOIN заменить на IN/EXISTS-подзапрос. Но про них тоже придется почитать...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / перейти к строке таблицы по номеру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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