如何合并具有相同名称 SQL 的行
How to Merge Rows with Same Name SQL Pivot
我正在尝试对 SQL 服务器中的一些数据进行非规范化,并且已经能够成功地转换引用 table,但希望能够像行一样进行合并。
枢轴执行如下
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
和returns
name | advanced | basic | standard
----------+----------+-------+---------
abby a | 1 | 0 | 0
abby a | 0 | 1 | 0
charlie c | 0 | 1 | 0
charlie c | 0 | 0 | 1
但我想return这种形式
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
这样的操作到 return SQL 服务器中的合并枢轴 table?
您需要在 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;
我正在尝试对 SQL 服务器中的一些数据进行非规范化,并且已经能够成功地转换引用 table,但希望能够像行一样进行合并。
枢轴执行如下
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
和returns
name | advanced | basic | standard
----------+----------+-------+---------
abby a | 1 | 0 | 0
abby a | 0 | 1 | 0
charlie c | 0 | 1 | 0
charlie c | 0 | 0 | 1
但我想return这种形式
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
这样的操作到 return SQL 服务器中的合并枢轴 table?
您需要在 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;