如果 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
我不确定我问的是否正确,但我试图让 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