【问题标题】:How to use a column as a key to pivot columns in SQL如何使用列作为在 SQL 中对列进行透视的键
【发布时间】:2020-05-13 17:19:51
【问题描述】:

我正在尝试旋转表格并聚合一些子类别。但是,在聚合时,子类别没有正确连接。

示例表

| 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"]         |

查询

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

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

【问题讨论】:

  • 您不应该使用子查询。直接使用string_agg
  • 太棒了。谢谢!!

标签: sql sql-server pivot string-aggregation


【解决方案1】:

您可以在 STRING_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]

【讨论】:

  • SELECT CAT AS CATEGORYMAIN, '["' + STRING_AGG(SUB, '","')+ '"]' AS SUB FROM @T GROUP BY [CAT]简单得多
【解决方案2】:

正如马丁建议的那样,我们可以直接使用string_agg

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

【讨论】:

  • 你也不需要select'["' + string_agg(categorySub, '","' + '"]' 应该可以工作
猜你喜欢
  • 2020-05-26
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多