Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / перейти к строке таблицы по номеру / 18 сообщений из 18, страница 1 из 1
01.07.2019, 22:09
    #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
01.07.2019, 22:23
    #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
01.07.2019, 23:36
    #39832527
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перейти к строке таблицы по номеру
LanaRix,

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

вы не своими словами объясняйте, что делать хотите, а саму задачу сюда пишите и все скрипты участвующих таблиц и их наполнерие и желаемый результат
...
Рейтинг: 0 / 0
02.07.2019, 11:17
    #39832642
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перейти к строке таблицы по номеру
LanaRixГавриленко Сергей Алексеевич, я не знаю, какие именно ключи братьТе, которые однозначно идентифицируют запись.
...
Рейтинг: 0 / 0
02.07.2019, 11:24
    #39832649
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перейти к строке таблицы по номеру
Соединять в запросе первую таблицу и подзапрос, в котором агрегация по полям для поиска в другой
...
Рейтинг: 0 / 0
02.07.2019, 11:28
    #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
02.07.2019, 11:28
    #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
02.07.2019, 11:32
    #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
02.07.2019, 11:40
    #39832662
LanaRix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перейти к строке таблицы по номеру
londinium,
в принципе, если в документации посидеть подольше, то можно разобраться
...
Рейтинг: 0 / 0
02.07.2019, 13:08
    #39832716
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перейти к строке таблицы по номеру
LanaRixlondinium,
в принципе, если в документации посидеть подольше, то можно разобраться
зачем? тут на форуме куча бездельников, выложат все на блюдечке
...
Рейтинг: 0 / 0
02.07.2019, 17:58
    #39832948
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перейти к строке таблицы по номеру
LanaRixlondinium,
в принципе, если в документации посидеть подольше, то можно разобраться

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

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


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