Sql Server посчитает несколько строк и оставит остальные

#sql #sql-server #count

#sql #sql-server #подсчитайте

Вопрос:

У меня есть запрос select, который приводит к таблице ниже:

 RowNo |  ComponentRef | ComponentTitle

  1   |      NULL     |   UsersCount5
  2   |      NULL     |   UsersCount1 
  3   |      NULL     |   UsersCount1
  4   |      NULL     |   UsersCount1
  5   |       2       |   SomeComponent
  6   |       3       |   SomeOtherComponent
  7   |       4       |   YetAnotherComponent
  

Мне нужно иметь и выводить следующим образом:

 RowNo |  ComponentRef | ComponentTitle

  1   |      NULL     |   UsersCount8               ===> (5 1 1 1)
  2   |       2       |   SomeComponent
  3   |       3       |   SomeOtherComponent
  4   |       4       |   YetAnotherComponent
  

Я не знаю, как подсчитывать строки ComponentTitle , начиная с «UsersCount», и просто оставляю остальные строки такими, какие они есть.

Любая помощь приветствуется.

P.S.1: забудьте о RowNo столбце. Я могу с этим справиться 🙂

P.S.2: Вместо UsersCount8 того, чтобы вы могли просто сказать мне, как поместить Count эти конкретные строки (в данном случае, 4 ). Я буду играть со строкой и прочее 🙂

Ответ №1:

 SELECT  rowNo, componentRef,
        CASE WHEN componentRef IS NULL THEN 'UsersCount'   ucsum ELSE componentRef END
FROM    (
        SELECT  *,
                SUM(CASE WHEN componentRef IS NULL THEN CAST(REPLACE(componentTitle, 'UsersCount', '') AS INT) END) AS ucsum,
                ROW_NUMBER() OVER (PARTITION BY componentRef ORDER BY rowNum) rn
        ) q
WHERE   componentRef IS NOT NULL OR rn = 1
  

Комментарии:

1. Но мне понадобится a Group By ComponentTitle , который создает проблемы.. Пытаюсь справиться с этим, спасибо в любом случае 🙂

Ответ №2:

Я думаю, вы можете делать то, что хотите, как:

 select row_number() over (order by (select NULL)) as seqnum,
       ComponentRef,
       (case when ComponentRef is not null then max(ComponentTitle)
             else cast(count(*) as varchar(255))
        end)
from table t
group by ComponentRef;