Sql 将几行信息转换为一行
我有关于客户电子邮件地址和电话号码的信息,但数据存储在不同的表中,每个客户都有几行 我有我的主表与customerId等,我需要加入电子邮件和电话号码。为此,我有一个带有通信id的“translation”表,用于连接这些表 比如说 主表:Sql 将几行信息转换为一行,sql,teradata,Sql,Teradata,我有关于客户电子邮件地址和电话号码的信息,但数据存储在不同的表中,每个客户都有几行 我有我的主表与customerId等,我需要加入电子邮件和电话号码。为此,我有一个带有通信id的“translation”表,用于连接这些表 比如说 主表: CustomerID var1 var2 ... 123 1 7 我需要使用翻译表将主表与包含电子邮件和电话的表连接起来,如下所示 CustomerID CommID 123 780 123 781
CustomerID var1 var2 ...
123 1 7
我需要使用翻译表将主表与包含电子邮件和电话的表连接起来,如下所示
CustomerID CommID
123 780
123 781
123 782
commID email
780 a@a.com
commID phone
781 88888
CustomerID var1 var2 email phone
123 1 7 a@a.com 88888
有邮件的桌子可能是这样的
CustomerID CommID
123 780
123 781
123 782
commID email
780 a@a.com
commID phone
781 88888
CustomerID var1 var2 email phone
123 1 7 a@a.com 88888
有电话号码的桌子可能是这样的
CustomerID CommID
123 780
123 781
123 782
commID email
780 a@a.com
commID phone
781 88888
CustomerID var1 var2 email phone
123 1 7 a@a.com 88888
如果我将上述三个表加入到我的主表中,我将实现以下目标:
CustomerID var1 var2 email phone
123 1 7 a@a.com ?
123 1 7 ? 88888
123 1 7 ? ?
我明白为什么我会得到3行,但我想得到的是这样一行
CustomerID CommID
123 780
123 781
123 782
commID email
780 a@a.com
commID phone
781 88888
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
要将多行合并为一行,您通常通过以下方式进行分组:
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
要将多行合并为一行,您通常通过以下方式进行分组:
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
您的实际连接语法是什么?你不应该得到三行,你应该加入五个表(或七个),而不是三个。对不起,我犯了一个错误。我的电子邮件和电话表中没有CustomerID。联接语法为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.commidw是否可能存在多个电子邮件地址或电话号码(即CommID值为782的记录是否可以引用电子邮件或电话号码表中的第二条记录)。如果是这样的话,结果应该是什么?不,它是唯一的……当然,“真正”的问题对于日期变量来说要复杂一些,因为客户可能已经更改了他的信息。但真正的问题是我如何将所有相关的信息放在一行中:)
teradata
或mysql
?实际的连接语法是什么?你不应该得到三行,你应该加入五个表(或七个),而不是三个。对不起,我犯了一个错误。我的电子邮件和电话表中没有CustomerID。联接语法为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.commidw是否可能存在多个电子邮件地址或电话号码(即CommID值为782的记录是否可以引用电子邮件或电话号码表中的第二条记录)。如果是这样的话,结果应该是什么?不,它是唯一的……当然,“真正”的问题对于日期变量来说要复杂一些,因为客户可能已经更改了他的信息。但真正的问题是我如何将所有相关的信息放在一行中:)teradata
或mysql
?