Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нумерация ROW_NUMBER без последней строки / 9 сообщений из 9, страница 1 из 1
03.03.2018, 09:25
    #39609909
ypmail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация ROW_NUMBER без последней строки
Добрый день!
Есть выборка с последней строкой. Нужно пронумеровать записи без последней строки, т.к. последняя строка - строка итогов (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
03.03.2018, 09:32
    #39609910
Нумерация ROW_NUMBER без последней строки
ypmail,

введи еще одно поле-нумератор (через всё тот же ROW_NUMBER), но в обратной сортировке. Для строки с RN = 1 не отображай значения из своего первоначального поля-нумератора...
...
Рейтинг: 0 / 0
03.03.2018, 09:41
    #39609913
ypmail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация ROW_NUMBER без последней строки
Не совсем понимаю, можно пример?
...
Рейтинг: 0 / 0
03.03.2018, 09:48
    #39609917
Нумерация ROW_NUMBER без последней строки
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
03.03.2018, 10:33
    #39609929
ypmail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация ROW_NUMBER без последней строки
Добрый Э - Эх, спасибо за помощь.
Не совсем понял манипуляции с 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
03.03.2018, 11:44
    #39609951
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация ROW_NUMBER без последней строки
А если так?
Код: 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
03.03.2018, 11:58
    #39609954
ypmail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация ROW_NUMBER без последней строки
А в чём разница?
...
Рейтинг: 0 / 0
03.03.2018, 12:01
    #39609955
ypmail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация ROW_NUMBER без последней строки
Нашел в чём разница. Так не работает, я же в MAX(ID)+1 ставлю строчку с нулевым ID в конец выборки, она у меня строка итогов. А по Вашему варианту она становится в начало.
...
Рейтинг: 0 / 0
03.03.2018, 12:04
    #39609956
ypmail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация ROW_NUMBER без последней строки
Получилось вывести в отчёт html 3 разные таблицы с нумерацией и итогами, всем спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нумерация ROW_NUMBER без последней строки / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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