Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нумерация ROW_NUMBER без последней строки  [new]
ypmail
Member

Откуда:
Сообщений: 331
Добрый день!
Есть выборка с последней строкой. Нужно пронумеровать записи без последней строки, т.к. последняя строка - строка итогов (8 строчка на скриншоте не должна нумероваться). Ничего не могу придумать.
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), ())


К сообщению приложен файл. Размер - 80Kb
3 мар 18, 09:25    [21234239]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация ROW_NUMBER без последней строки  [new]
Добрый Э - Эх
Guest
ypmail,

введи еще одно поле-нумератор (через всё тот же ROW_NUMBER), но в обратной сортировке. Для строки с RN = 1 не отображай значения из своего первоначального поля-нумератора...
3 мар 18, 09:32    [21234246]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация ROW_NUMBER без последней строки  [new]
ypmail
Member

Откуда:
Сообщений: 331
Не совсем понимаю, можно пример?
3 мар 18, 09:41    [21234260]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация ROW_NUMBER без последней строки  [new]
Добрый Э - Эх
Guest
ypmail,

--
-- Набор тестовых данных:
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



Хотя, в твоей случае, возможно, хватит и более простого варианта:
--
-- Набор тестовых данных:
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
3 мар 18, 09:48    [21234267]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация ROW_NUMBER без последней строки  [new]
ypmail
Member

Откуда:
Сообщений: 331
Добрый Э - Эх, спасибо за помощь.
Не совсем понял манипуляции с 0 и 1 в примере, но в моем случае заработало
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), ())
3 мар 18, 10:33    [21234318]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация ROW_NUMBER без последней строки  [new]
Massa52
Member

Откуда:
Сообщений: 373
А если так?
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), ())
3 мар 18, 11:44    [21234441]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация ROW_NUMBER без последней строки  [new]
ypmail
Member

Откуда:
Сообщений: 331
А в чём разница?
3 мар 18, 11:58    [21234456]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация ROW_NUMBER без последней строки  [new]
ypmail
Member

Откуда:
Сообщений: 331
Нашел в чём разница. Так не работает, я же в MAX(ID)+1 ставлю строчку с нулевым ID в конец выборки, она у меня строка итогов. А по Вашему варианту она становится в начало.
3 мар 18, 12:01    [21234459]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация ROW_NUMBER без последней строки  [new]
ypmail
Member

Откуда:
Сообщений: 331
Получилось вывести в отчёт html 3 разные таблицы с нумерацией и итогами, всем спасибо!
3 мар 18, 12:04    [21234463]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить