我试图将电子邮件列表旋转到一行上,但由于某种原因,我的主要电子邮件地址得到了自己的一行,所以我最终每个联系人有两行。
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)
任何帮助将不胜感激,谢谢。
尝试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)