Как объединить строки с одинаковым именем SQL Pivot - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь денормализовать некоторые данные в 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 by или select distinct, чтобы вернуть сводную сводную таблицу в SQL Server?

1 Ответ

1 голос
/ 30 мая 2019

Вам нужно ограничить столбцы в вашем подзапросе до 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;
...