#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;