【问题标题】:Tsql Pivot on string + concatTsql Pivot on string + concat
【发布时间】:2013-05-25 06:31:06
【问题描述】:

对于我的特定情况,我在使用 Pivot 查询时遇到了一些困难。 我必须在一个 int 列上旋转一个字符串列(所以只有 2 列) 第三列将保存字符串的串联

Example:
CustomerID   Breed
--------------------------
1            Pug
1            Bulldog
1            Doberman
2            Doberman
3            Bulldog
3            Doberman
3            Pug
3            Poedel


Result:    
CustomerID  Pug    Bulldog    Doberman    Poodle    Concat
-----------------------------------------------------------------------------
1           Pug    Bulldog    Doberman    NULL      Pug,Bulldog,Doberman
2           NULL   NULL       Doberman    NULL      Doberman
3           Pug    Bulldog    Doberman    Poodle    Pug,Bulldog,Doberman,Poodle

我已经尝试过以下帖子中描述的方法: SQL Server: Examples of PIVOTing String data

但这只是到处返回 NULL,我猜这是因为我的 ID 列。

非常感谢任何和所有帮助。

【问题讨论】:

  • 您会编辑问题并添加您迄今为止开发的查询吗?

标签: string tsql pivot concat


【解决方案1】:

您可以使用 FOR XML PATH 和 STUFF 连接品种列表。获取带有品种列表的customerID 的查询将类似于:

select customerid, breed,
 STUFF((SELECT DISTINCT ', ' + t2.breed
        FROM yt t2
        WHERE t1.customerid = t2.customerid
        FOR XML PATH('')), 1, 1, '') breedList
from yt t1

SQL Fiddle with Demo

然后您可以轻松地将此查询合并到 PIVOT 中:

;with cte as
(
  select customerid, breed,
     STUFF((SELECT DISTINCT ', ' + t2.breed
            FROM yt t2
            WHERE t1.customerid = t2.customerid
            FOR XML PATH('')), 1, 1, '') breedList
  from yt t1
)
select customerid, Pug, Bulldog, Doberman, Poodle, breedList
from cte
pivot
(
  max(breed)
  for breed in (Pug, Bulldog, Doberman, Poodle)
) piv
order by customerid;

SQL Fiddle with Demo。这给出了一个结果:

| CUSTOMERID |    PUG | BULLDOG | DOBERMAN | POODLE |                       BREEDLIST |
---------------------------------------------------------------------------------------
|          1 |    Pug | Bulldog | Doberman | (null) |          Bulldog, Doberman, Pug |
|          2 | (null) |  (null) | Doberman | (null) |                        Doberman |
|          3 |    Pug | Bulldog | Doberman | Poodle |  Bulldog, Doberman, Poodle, Pug |

【讨论】:

  • 不错,我不熟悉 STUFF 函数。此外,我在数据透视表中看到的所有示例都涉及 3 列。感谢您的洞察力。
猜你喜欢
  • 1970-01-01
  • 2018-03-06
  • 2013-11-04
  • 2013-07-10
  • 1970-01-01
  • 2012-06-20
  • 2018-11-08
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多