如何使用列作为键来透视SQL中的列

如何使用列作为键来透视SQL中的列,sql,sql-server,pivot,string-aggregation,Sql,Sql Server,Pivot,String Aggregation,我试图透视一个表并聚合一些子类别。但是,在聚合时,子类别没有正确连接 示例表 | category | categorySub | |----------|-------------| | cat-1 | sub-1 | | cat-1 | sub-2 | | cat-1 | sub-3 | | cat-2 | sub-4 | | cat-2 | sub-5 | 实际产出 | category | cat

我试图透视一个表并聚合一些子类别。但是,在聚合时,子类别没有正确连接

示例表

| category | categorySub |
|----------|-------------|
| cat-1    | sub-1       |
| cat-1    | sub-2       |
| cat-1    | sub-3       |
| cat-2    | sub-4       |
| cat-2    | sub-5       |
实际产出

| category | categorySub                               |
|----------|-------------------------------------------|
| cat-1    | ["sub-1","sub-2","sub-3","sub-4","sub-5"] |
| cat-2    | ["sub-1","sub-2","sub-3","sub-4","sub-5"] |
| category | categorySub               |
|----------|---------------------------|
| cat-1    | ["sub-1","sub-2","sub-3"] |
| cat-2    | ["sub-4","sub-5"]         |
所需输出

| category | categorySub                               |
|----------|-------------------------------------------|
| cat-1    | ["sub-1","sub-2","sub-3","sub-4","sub-5"] |
| cat-2    | ["sub-1","sub-2","sub-3","sub-4","sub-5"] |
| category | categorySub               |
|----------|---------------------------|
| cat-1    | ["sub-1","sub-2","sub-3"] |
| cat-2    | ["sub-4","sub-5"]         |
查询

select 
[categoryMain] = [category],
[categorySub] = '["' + (select string_agg(categorySub, '","') from someTable where [categoryMain] = [category]) + '"]'
from someTable
group by [category]

如何引用[category]或其别名来减少字符串聚合?

正如Martin所建议的,我们可以直接使用
string\u agg
,如下所示:

select 
[categoryMain] = [category],
[categorySub] = '["' + (select string_agg(categorySub, '","') + '"]'
from someTable
group by [category]

您可以在
STRING\u AGG
本身中使用它

DECLARE @T Table(
cat Varchar(max),
SUB varchar(max))

Insert into @T Values ('cat-1','sub-1')
Insert into @T Values ('cat-1','sub-2')
Insert into @T Values ('cat-1','sub-3')
Insert into @T Values ('cat-2','sub-4')
Insert into @T Values ('cat-2','sub-5')

SELECT CAT AS CATEGORYMAIN, '["' + STRING_AGG(SUB, '","')+ '"]' AS SUB 
FROM @T GROUP BY [CAT]

您不应该使用子查询。只需直接使用string_agg即可。谢谢您也不需要
select
“[”+string\u agg(categorySub),““+”””,“+”””,
应该比
select CAT作为CATEGORYMAIN,“[”+string\u agg(SUB),“)+“]”作为@t GROUP BY[CAT]的SUB更简单。