如果 x 列是重复记录,则合并 a、b、c 列 - SQL

Combine columns a, b, c if column x is duplicate record - SQL

我不确定我问的是否正确,但我试图让 1 行包含每个“政策”的所有数据。问题是,每行只给出 1 个“保险名称”。

示例table:

我需要得到以下结果:

我该怎么做?

---编辑--- 如果只有一个被保险人,我希望 insuredName2 为 NULL

我相信您想以某种方式使用以下内容:

    SELECT DISTINCT a.insuredName, b.insuredName 
    FROM table a 
    INNER JOIN table b 
     ON a.policyNumber = b.policyNumber

如果生效日期也是一个考虑因素:

    ...
    On a.policyNumber = b.policyNumber
    And a.effectiveDate = b.effectiveDate;

我在查询中添加了生效日期,因为我可以看到一个包含保单编号和生效日期的复合主键。

这假设数据视图将接受table 并更改现有 table 结构和数据。

 SELECT a.PolicyNumber, a.effecitveDate a.insuredName as InsuredName1,   
        b.insuredName as InsuredName2
 FROM table a 
 INNER JOIN table b 
   ON a.policyNumber = b.policyNumber
  and A.effectiveDate = b.effectiveDate

请务必将 table 更改为您的 tablename 拥有此数据。

此外,如果您想确保一种方式的匹配在连接上只有 and a.insuredName > B.InsuredName。这是根据 jbrooks 的精彩评论添加的。

因为您可以有无限数量的 if 名称,所以我会将它们全部连接到一个列中,然后在我加载它时再次将其分开。我不知道 Netezza,但这是你在 SQL 服务器:

中的做法
        SELECT PolicyNumber,
               InsuredDate,  
               STUFF(
                    (
                     SELECT ';'+ a.Path 
                     FROM Insured a 
                     WHERE t.PolicyNumber = a.PolicyNumber 
                     FOR XML PATH('')
                    ),1,1,'')  AS InsuredNames
        FROM (SELECT PolicyNumber, 
                     MIN(InsuredDate) AS InsuredDate 
              FROM Insured 
              GROUP BY PolicyNumber) t