Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
107 / 107 / 9
Регистрация: 19.12.2010
Сообщений: 417

Выборка n-ых записей подчинённой таблицы

17.03.2016, 13:14. Показов 2101. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Допустим, есть
Table1: ID, Name
#Table2: ID, Table1ID, Name, Value
Необходимо каждой записи Table1 сопоставить его value с номером n.
Т.е. Для каждой записи из Table1 найти все value из #Table2, отсортировать по убыванию и взять value под номером n, чтобы получилась таблица:
ResultTable: Table1ID, Table1Name, ValueN

Выборка n-ой отсортированной записи для конкретного Table1.ID делается несложно (где '2' - и есть n):
T-SQL
1
2
3
4
5
6
SELECT TOP 1 *
FROM    (SELECT TOP 2 *
          FROM #Table2
        WHERE Table1ID = 1
            ORDER BY Value DESC) AS tmp
ORDER BY Value ASC
Но необходимо сделать выборку для каждого ID из Table1 по отдельности и предоставить в одной таблице.
Логично применить группировку, но непонятно как вычислить ValueN. Написать свою функцию - они не принимают временные таблицы. Таблица временная, потому что я не знаю как иначе разбить сложный запрос для посчёта каждого Table2.Value
Помогите составить запрос, пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2016, 13:14
Ответы с готовыми решениями:

Выборка из таблицы одинаковых записей
Выборка из таблицы одинаковых записей, понимаю, что тема не новье, но прошу помощи! Есть таблица: Необходимо составить запрос,...

Выборка уникальных записей
Допустим есть таблица, в ней около 10К записей. Таблица хранит в себе результаты кореляционного анализа, а каждая запись имеет три поля: ...

Выборка неуникальных записей из базы
Как выбрать все неуникальные записи из базы ?

4
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
17.03.2016, 13:22
Разных решений столько, что глаза разбегаются.
Однако, некоторые из них зависят от версии сервера...
0
107 / 107 / 9
Регистрация: 19.12.2010
Сообщений: 417
17.03.2016, 13:47  [ТС]
MS SQL Server 2014
Пока придумал вот такое решение:
T-SQL
1
2
3
4
5
6
7
8
SELECT Table1.ID,
                (SELECT TOP 1 Value
                FROM    (SELECT TOP 2 *
                        FROM #Table2
                        WHERE Table1ID = Table1.ID
                                                ORDER BY Value DESC) AS tmp
                ORDER BY Value ASC) as tmp2
FROM Table1;
Насколько это оптимальное решение?
Покрасивее и поэлегантнее бы что-то...
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
17.03.2016, 14:20
T-SQL
1
2
3
4
5
6
7
8
9
SELECT T1.ID,T2.[Value]
FROM Table1 T1
OUTER APPLY
(
 SELECT *
 FROM #Table2 T2
 WHERE T2.Table1ID=T1.ID
 ORDER BY T2.[Value] DESC OFFSET @n-1 ROWS FETCH FIRST 1 ROW ONLY
) T2;
T-SQL
1
2
3
4
5
6
7
8
SELECT T1.ID,T2.[Value]
FROM Table1 T1
OUTER APPLY
(
 SELECT *
 FROM (SELECT N=ROW_NUMBER()OVER(ORDER BY T2.[Value] DESC),* FROM #Table2 T2 WHERE T2.Table1ID=T1.ID) T2
 WHERE N=@n
) T2;
1
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
17.03.2016, 14:21
T-SQL
1
2
3
4
5
6
select
 Table1.ID,
 a.Value
from
 Table1 t1 outer apply
 (select t.Value from (select Value, row_number() over (order by Value desc) as rn from Table2 where ID = t1.ID) t where t.rn = 2) a
Плюс на Table2 индекс по (ID, Value)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.03.2016, 14:21
Помогаю со студенческими работами здесь

Выборка записей с 3мя цифрами
Здравствуйте Есть такая задача, нужно вывести книги из таблицы в названии которых есть как минимум 3 цифры Пример названия книги -...

Вывод записей первой таблицы, которых нет во второй (таблицы отличаются набором столбцов и строк)
Есть таблица Недвижимость (код недвижимости, город, адрес, кол-во комнат, площадь) и есть таблица Сделки (код сделки, код недвижимости, код...

Выборка записей о покупке/продаже мебели
Доброго времени суток, уважаемые форумчане! Так вышло, что появилась необходимость решить одну нетривиальную задачу. СУБД - MS SQL...

Запрос к БД, выборка записей и подсчет сумм
Не получается никак запрос слепить... к тому же в MS SQL нельзя вложенные агрегаты делать... Задание "Выясните с помощью...

Выборка записей случайным образом из базы данных
Необходимо разработать программу в которой,понятия могут выбираться из заранее заданного множества случайным образом. Формирование БД...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru