几行信息到一行

时间:2016-06-13 13:03:38

标签: sql teradata

我有关于客户电子邮件地址和电话号码的信息,但数据存储在不同的表中,每个客户产生几行。

我的主表有customerId等,我需要加入电子邮件和电话号码。为此,我有一个“转换”表,其中包含连接表的communication_id。

例如

主表:

 CustomerID var1 var2 ...
 123        1    7

我需要使用的转换表将主表连接到包含电子邮件和电话的表格,如下所示

CustomerID CommID
123         780
123         781
123         782

电子邮件表格看起来像这样

commID email
780     a@a.com

并且带有电话号码的表格可能如下所示

commID phone
781     88888

如果我将上述3个表连接到我的主表,我所取得的成就是

CustomerID var1 var2    email    phone
123           1   7      a@a.com     ?
123           1   7       ?       88888
123           1   7       ?          ?

我理解为什么我会得到3行,但我想要实现的是像这样的单行

CustomerID var1 var2 email    phone
123          1     7  a@a.com     88888

谢谢 编辑:

连接语法是

sel * from maintable 
left join Communication on maintable.CustomerID=Communication.CustomerID 
left join email on email.commID=Communication.CommID 
left join phone on phone.commID=Communication.CommID

1 个答案:

答案 0 :(得分:2)

要将多行合并为一行,您通常会执行GROUP BY:

SELECT maintable.CustomerID, MAX(email), MAX(phone)
FROM maintable
LEFT JOIN Communication ON maintable.CustomerID=Communication.CustomerID 
LEFT JOIN email ON email.commID=Communication.CommID 
LEFT JOIN phone ON phone.commID=Communication.CommID
GROUP BY maintable.CustomerID