Разделенные запятыми значения в строках с суммой в SQL Server - PullRequest
0 голосов
/ 25 апреля 2020
create table #t(org varchar(50), area int)

insert into #t values ('a', 500), ('b', 200), ('c', 400)

select * from #t

Вывод:

org     area
--------------
a       500
b       200
c       400

Я хочу преобразовать вывод в этот формат:

org         area
-----------------
a,b,c       1100

т.е. разделить запятыми все орги и сумму значения этой области.

Ответы [ 4 ]

1 голос
/ 26 апреля 2020

Подзапрос действительно не нужен:

select stuff((select ','+t1.org from #t t1 for xml path('')), 1, 1, '') as org, 
       sum(area) as area
from #t t;
1 голос
/ 25 апреля 2020

Используйте SubQuery / CTE, оконную функцию SUM() OVER() и STRING_AGG()

create table #t(org varchar(50), area int)
insert into #t values ('a',500),('b',200),('c',400);


select string_agg(org, ',') org, area
from
(
  select org, sum(area) over() area
  from #t
)t
group by area

или

select org, sum(area) area
from
(
select stuff(
      (select ',' + org from #t  for xml path('')), 1, 1, '') org, area
from #t tt
) t
group by org
0 голосов
/ 26 апреля 2020

Вы можете использовать следующий запрос из двух частей, как показано ниже.

В первой части получите все значения через запятую и в конечном запросе выберите сумму всех значений области .

create table #t(org varchar(50), area int)
insert into #t values ('a', 500), ('b', 200), ('c', 400)

DECLARE @List VARCHAR(8000) 
SELECT @List = COALESCE(@List + ',', '') + org 
FROM   #t --For getting values in comma separated

SELECT @List as AllValues
   , sum(area) as Total
from #t

Live db <> fiddle demo.

0 голосов
/ 25 апреля 2020

Если вы используете sql сервер выше 2017 года, вы можете использовать String_agg()

create table #t(org varchar(50), area int)
insert into #t values ('a',500),('b',200),('c',400)
select String_agg(org, ',') as org, Sum(area) as sumarea 
from #t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...