SQL Server:PIVOTing字符串数据的示例

时间:2020-03-05 18:42:26  来源:igfitidea点击:

试图找到一些简单的SQL Server PIVOT示例。我发现的大多数示例都涉及对数字进行计数或者求和。我只想透视一些字符串数据。例如,我有一个查询,返回以下内容。

Action1 VIEW  
Action1 EDIT  
Action2 VIEW  
Action3 VIEW  
Action3 EDIT

我想使用PIVOT(如果可能的话)使结果如下所示:

Action1 VIEW EDIT  
Action2 VIEW NULL  
Action3 VIEW EDIT

使用PIVOT功能甚至有可能吗?

解决方案

回答

好吧,对于示例以及任何数量有限的唯一列,都应该这样做。

select 
    distinct a,
    (select distinct t2.b  from t t2  where t1.a=t2.a and t2.b='VIEW'),
    (select distinct t2.b from t t2  where t1.a=t2.a and t2.b='EDIT')
from t t1

回答

请记住,MAX聚合函数将同时适用于文本和数字。此查询将只需要扫描表一次。

SELECT Action,
       MAX( CASE data WHEN 'View' THEN data ELSE '' END ) ViewCol, 
       MAX( CASE data WHEN 'Edit' THEN data ELSE '' END ) EditCol
 FROM t
 GROUP BY Action

回答

如果我们特别想使用SQL Server PIVOT函数,那么这应该起作用,假定两个原始列分别称为act和cmd。 (虽然看起来不太漂亮。)

SELECT act AS 'Action', [View] as 'View', [Edit] as 'Edit'
FROM (
    SELECT act, cmd FROM data
) AS src
PIVOT (
    MAX(cmd) FOR cmd IN ([View], [Edit])
) AS pvt