powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нумерация ROW_NUMBER без последней строки
9 сообщений из 9, страница 1 из 1
Нумерация ROW_NUMBER без последней строки
    #39609909
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Есть выборка с последней строкой. Нужно пронумеровать записи без последней строки, т.к. последняя строка - строка итогов (8 строчка на скриншоте не должна нумероваться). Ничего не могу придумать.
Код: sql
1.
SELECT ROW_NUMBER() OVER(ORDER BY (CASE WHEN ID IS NULL THEN MAX(ID)+1 ELSE ID END) ASC) AS ROW, ID, NClaim, DateClaim, NZN, DZN, SUM(LClaim) AS LClaim, SUM(MClaim) AS MClaim, SUM(LMClaim) AS LMClaim, SUM(LProformPredpCalc) AS LProformPredpCalc, SUM(MProformPredpCalc) AS MProformPredpCalc, SUM(LMProformPredpCalc) AS LMProformPredpCalc FROM qdfAccount WHERE Oplacheno=0 AND Reject=0 GROUP BY GROUPING SETS ((ID, NClaim, DateClaim, NZN, DZN), ())
...
Рейтинг: 0 / 0
Нумерация ROW_NUMBER без последней строки
    #39609910
ypmail,

введи еще одно поле-нумератор (через всё тот же ROW_NUMBER), но в обратной сортировке. Для строки с RN = 1 не отображай значения из своего первоначального поля-нумератора...
...
Рейтинг: 0 / 0
Нумерация ROW_NUMBER без последней строки
    #39609913
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понимаю, можно пример?
...
Рейтинг: 0 / 0
Нумерация ROW_NUMBER без последней строки
    #39609917
ypmail,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
--
-- Набор тестовых данных:
with
  b$m_test (id) as
    (
      select * from (values (1),(5),(5),(8),(8),(8),(10),(15),(15),(17)) v(n)
    )
--
-- Основной запрос:
select case row_number() over(order by case when id is null then 0 else 1 end, id desc)
         when 1
           then null 
         else row_number() over(order by case when id is null then 1 else 0 end, id) 
       end as x_rn
     , ID
     , count(1) as cnt
  from b$m_test
  group by rollup(id)
  order by case when id is null then 1 else 0 end, id

on-line проверка на sqlfiddle.com



Хотя, в твоей случае, возможно, хватит и более простого варианта:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
--
-- Набор тестовых данных:
with
  b$m_test (id) as
    (
      select * from (values (1),(5),(5),(8),(8),(8),(10),(15),(15),(17)) v(n)
    )
--
-- Основной запрос:
select case
         when id is null
           then null 
         else row_number() over(order by case when id is null then 1 else 0 end, id) 
       end as x_rn
     , ID
     , count(1) as cnt
  from b$m_test
  group by rollup(id)
  order by case when id is null then 1 else 0 end, id

on-line проверка на sqlfiddle.com
...
Рейтинг: 0 / 0
Нумерация ROW_NUMBER без последней строки
    #39609929
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх, спасибо за помощь.
Не совсем понял манипуляции с 0 и 1 в примере, но в моем случае заработало
Код: sql
1.
2.
3.
4.
5.
SELECT CASE WHEN ID IS NULL THEN NULL ELSE ROW_NUMBER() OVER(ORDER BY (CASE WHEN ID IS NULL THEN MAX(ID)+1 ELSE ID END) ASC) END AS ROW,
  ID, NClaim, DateClaim, NZN, DZN, SUM(LClaim) AS LClaim, SUM(MClaim) AS MClaim, SUM(LMClaim) AS LMClaim, SUM(LProformPredpCalc) AS LProformPredpCalc,
  SUM(MProformPredpCalc) AS MProformPredpCalc, SUM(LMProformPredpCalc) AS LMProformPredpCalc
  FROM qdfAccount WHERE Oplacheno=0 AND Reject=0
  GROUP BY GROUPING SETS ((ID, NClaim, DateClaim, NZN, DZN), ())
...
Рейтинг: 0 / 0
Нумерация ROW_NUMBER без последней строки
    #39609951
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так?
Код: sql
1.
2.
3.
4.
5.
SELECT CASE WHEN ID IS NULL THEN NULL ELSE ROW_NUMBER() OVER(ORDER BY ID ASC) END AS ROW,
  ID, NClaim, DateClaim, NZN, DZN, SUM(LClaim) AS LClaim, SUM(MClaim) AS MClaim, SUM(LMClaim) AS LMClaim, SUM(LProformPredpCalc) AS LProformPredpCalc,
  SUM(MProformPredpCalc) AS MProformPredpCalc, SUM(LMProformPredpCalc) AS LMProformPredpCalc
  FROM qdfAccount WHERE Oplacheno=0 AND Reject=0
  GROUP BY GROUPING SETS ((ID, NClaim, DateClaim, NZN, DZN), ())
...
Рейтинг: 0 / 0
Нумерация ROW_NUMBER без последней строки
    #39609954
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чём разница?
...
Рейтинг: 0 / 0
Нумерация ROW_NUMBER без последней строки
    #39609955
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел в чём разница. Так не работает, я же в MAX(ID)+1 ставлю строчку с нулевым ID в конец выборки, она у меня строка итогов. А по Вашему варианту она становится в начало.
...
Рейтинг: 0 / 0
Нумерация ROW_NUMBER без последней строки
    #39609956
ypmail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось вывести в отчёт html 3 разные таблицы с нумерацией и итогами, всем спасибо!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нумерация ROW_NUMBER без последней строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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