powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получить следующее ненулевое значение MS SQL
5 сообщений из 5, страница 1 из 1
Получить следующее ненулевое значение MS SQL
    #39969940
Привет! Хочу разобраться вот с таким вопросом. Есть таблица:

Код номенклатурыНоменклатураПр-во 1 экзПроизводствоГодМесяц00000004444Номенклатура1NULLNULL20191100000004444Номенклатура165.13500020191200000004444Номенклатура1NULLNULL2020100000004444Номенклатура1NULLNULL2020200000004444Номенклатура1NULLNULL2020300000004444Номенклатура162.3860002020400000004444Номенклатура1NULLNULL2020500000004444Номенклатура1NULLNULL20206

В колонку Пр-во 1 экз ожидаю получить значения, равные следующему NOT NULL:

Код номенклатурыНоменклатураПр-во 1 экзПроизводствоГодМесяц00000004444Номенклатура165.13NULL20191100000004444Номенклатура165.13500020191200000004444Номенклатура165.13NULL2020100000004444Номенклатура165.13NULL2020200000004444Номенклатура165.13NULL2020300000004444Номенклатура162.3860002020400000004444Номенклатура162.38NULL2020500000004444Номенклатура162.38NULL20206

Или необязательно с первой строки, достаточно будет получить:

Код номенклатурыНоменклатураПр-во 1 экзПроизводствоГодМесяц00000004444Номенклатура1NULLNULL20191100000004444Номенклатура165.13500020191200000004444Номенклатура165.13NULL2020100000004444Номенклатура165.13NULL2020200000004444Номенклатура165.13NULL2020300000004444Номенклатура162.3860002020400000004444Номенклатура162.38NULL2020500000004444Номенклатура162.38NULL20206

Нагуглил разные решения, в т.ч. такое, этот запрос почти подходит:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.[Код номенклатуры], t1.[Номенклатура], t2.[Год], t2.[Месяц], t2.[Пр-во 1 экз] AS [Пр-во 1 экз t2], t1.[Пр-во 1 экз], t1.[Год], t1.[Месяц], t1.[Производство], t1.[Год], t1.[Месяц]
  FROM [table1] t1 OUTER APPLY
  (SELECT TOP 1 t2.* 
  FROM [table1] t2 
  WHERE t2.[Код номенклатуры] = t1.[Код номенклатуры] AND t2.[Пр-во 1 экз] IS NOT NULL 
  ORDER BY t2.[Код номенклатуры], t2.[Год], t2.[Месяц]
  ) t2 
  ORDER BY t1.[Код номенклатуры], t1.[Год], t1.[Месяц] 



Но так как здесь нету уникального идентификатора для каждой строки, то результат не совсем тот, который нужен:

Код номенклатурыНоменклатураГодМесяцПр-во 1 экз t2Пр-во 1 экзГодМесяцПроизводствоГодМесяц00000004444Номенклатура120191265.13NULL201911NULL20191100000004444Номенклатура120191265.1365.13201912500020191200000004444Номенклатура120191265.13NULL20201NULL2020100000004444Номенклатура120191265.13NULL20202NULL2020200000004444Номенклатура120191265.13NULL20203NULL2020300000004444Номенклатура120191265.1362.382020460002020400000004444Номенклатура120191265.13NULL20205NULL2020500000004444Номенклатура120191265.13NULL20206NULL20206

Прошу подсказать.
...
Рейтинг: 0 / 0
Получить следующее ненулевое значение MS SQL
    #39969962
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
diamondback explorer
так как здесь нету уникального идентификатора для каждой строки
Будь так - задача была бы нерешаема в принципе.
Предполагаю, что уникальным идентификатором следует объявить набор полей (Код номенклатуры, Год, Месяц) .
...
Рейтинг: 0 / 0
Получить следующее ненулевое значение MS SQL
    #39969988
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
;with t as (
select nom, name, pr,kol,god,mes from table1 where not pr is null
)
select a.nom, a.name,
(select top 1 b.pr from t b where a.nom=b.nom and (b.mes+b.god*100 <=a.mes+a.god*100) order by b.mes+b.god*100 desc)
, a.kol, a.god,a.mes from table1 a
...
Рейтинг: 0 / 0
Получить следующее ненулевое значение MS SQL
    #39970026
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT t1.[Код номенклатуры], t1.[Номенклатура], t2.[Год], t2.[Месяц], t2.[Пр-во 1 экз] AS [Пр-во 1 экз t2], t1.[Пр-во 1 экз], t1.[Год], t1.[Месяц], t1.[Производство], t1.[Год], t1.[Месяц]
  FROM [table1] t1 OUTER APPLY
  (SELECT TOP 1 t2.* 
  FROM [table1] t2 
  WHERE t2.[Код номенклатуры] = t1.[Код номенклатуры] AND t2.[Пр-во 1 экз] IS NOT NULL 
AND t2.[Год] >= t1.[Год] AND t1.[Месяц] >= t2.[Месяц] -- добавьте
  ORDER BY t2.[Код номенклатуры], t2.[Год], t2.[Месяц]
  ) t2 
  ORDER BY t1.[Код номенклатуры], t1.[Год], t1.[Месяц] 
...
Рейтинг: 0 / 0
Получить следующее ненулевое значение MS SQL
    #39970140
godsql,

Это то, что надо, разобрался, благодарю за помощь. С никнеймом согласен :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получить следующее ненулевое значение MS SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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