【问题标题】:How to Merge Rows with Same Name SQL Pivot如何合并具有相同名称 SQL Pivot 的行
【发布时间】:2019-05-30 15:33:32
【问题描述】:

我正在尝试对 SQL Server 中的一些数据进行非规范化,并且能够成功地对引用表进行透视,但希望能够合并类似的行。

枢轴执行如下

select distinct 
'name' = sFname + ' ' + sLname,
advanced, 
basic, 
standard

from
(select * from dbName..person where deleteFlag <> 'Y') as tableTemp
pivot (
  count(serviceType)
  for serviceType IN (advanced, basic, standard)
) as tablePivot

然后返回

name      | advanced | basic | standard
----------+----------+-------+---------
abby a    |     1    |   0   |    0
abby a    |     0    |   1   |    0
charlie c |     0    |   1   |    0
charlie c |     0    |   0   |    1

但我想以这种形式返回

name      | advanced | basic | standard
----------+----------+-------+---------
abby a    |     1    |   1   |    0
charlie c |     0    |   1   |    1

原始数据的结构类似于

sFname   | sLname   | serviceType |
---------+----------+-------------+
abby     |     a    |   advanced  |
abby     |     a    |   basic     |
charlie  |     c    |   basic     |
charlie  |     c    |   standard  |

如何运行 group byselect distinct 之类的操作以在 SQL Server 中返回合并的透视表?

【问题讨论】:

    标签: sql-server group-by pivot distinct


    【解决方案1】:

    您需要限制子查询中 PIVOT 之前的列。

    SELECT [name], 
           [advanced], 
           [basic], 
           [standard]
    FROM   (
               SELECT 'name' = sFname + ' ' + sLname, 
                      serviceType
               FROM   person
               WHERE  deleteFlag <> 'Y'
           ) AS tableTemp 
    PIVOT(COUNT(serviceType) FOR serviceType IN(advanced, basic, standard)) AS tablePivot;
    

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多