PIVOT、Row_Number() 返回多行

Don*_*Don 2 sql-server pivot

我试图将电子邮件列表旋转到一行上,但由于某种原因,我的主要电子邮件地址得到了自己的一行,所以我最终每个联系人有两行。

CREATE TABLE #tmp (
ID VARCHAR(20)
, EMAIL VARCHAR(50)
, isPrimary VARCHAR(1)
)

INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'ABoyd@Energize.com', '1')
INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'BSykes@Energize.com', '0')
INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'TC6@test.com', '0')
Run Code Online (Sandbox Code Playgroud)

我如何修改下面的脚本以仅返回包含所有 3 个电子邮件地址的一行而不是两行?

SELECT ID, [1], [2], [3]
FROM (
  Select ID, EMAIL, isPrimary 
  , ROW_NUMBER() OVER (PARTITION BY ID ORDER BY isPrimary desc) AS rn
  from #tmp
) eml
PIVOT (
  min(EMAIL)
  FOR rn IN ([1],[2],[3])
) P
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,谢谢。

Sco*_*red 5

尝试isPrimary从您SELECT正在计算的位置删除ROW_NUMBER().

SELECT ID, [1], [2], [3]
FROM (
  Select ID, EMAIL
  , ROW_NUMBER() OVER (PARTITION BY ID ORDER BY isPrimary desc) AS rn
  from #tmp
) eml
PIVOT (
  min(EMAIL)
  FOR rn IN ([1],[2],[3])
) P
Run Code Online (Sandbox Code Playgroud)
| ID                   | 1                  | 2                   | 3            |
|----------------------|--------------------|---------------------|--------------|
| B4100358183Q!ZH.ETES | ABoyd@Energize.com | BSykes@Energize.com | TC6@test.com |
Run Code Online (Sandbox Code Playgroud)