0

我有一个带有 2 个表的 SQL 数据库:

客户

ClientID
ClientName
ClientBirthdate

地址

ClientID
Addressline1
Addressline2
Telephone1
Telephone2

客户端可能有多个地址,因此 ClientID 不是地址表中的唯一值。我的问题是我想向每个唯一的电话号码发送一条短信。Telephone1 和 Telephone2 都可以为空,所以基本上我不知道客户有多少个唯一的电话号码。当我现在加入他们时,它看起来像这样:

ClientID  | ClientName | Telephone1 | Telephone2
------------------------------------------------
Client001 | James      | 12345      | 22312
Client001 | James      | 12345      | 
Client002 | Alfred     |            | 11111
Client002 | Alfred     | 11111      | 
Client002 | Alfred     | 22222      | 

虽然我想要的是这样的:

ClientID  | ClientName | Number1    | Number2
----------------------------------------------
Client001 | James      | 12345      | 22312
Client001 | Alfred     | 11111      | 22222

目前我不知道如何实现这一目标。任何人都可以在这个问题上大放异彩吗?

预先感谢,

詹姆士。

编辑:数据库已经存在,并且已经被填满。我不能改变数据库的结构,我只能做 SELECT 查询。

4

2 回答 2

0

这是我建议的解决方案(如果我正确理解了问题):

SELECT DISTINCT CLIENTID, 
                CLIENTNAME, 
                TELEPHONE 
FROM   (SELECT T1.CLIENTID, 
               T1.CLIENTNAME, 
               T2.TELEPHONE1 AS Telephone 
        FROM   CLIENT T1 
               INNER JOIN (SELECT CLIENTID, 
                                  TELEPHONE1 
                           FROM   ADDRESS 
                           WHERE  TELEPHONE1 IS NOT NULL)T2 
                       ON T1.CLIENTID = T2.CLIENTID 
        UNION 
        SELECT T1.CLIENTID, 
               T1.CLIENTNAME, 
               T2.TELEPHONE2 AS Telephone 
        FROM   CLIENT T1 
               INNER JOIN (SELECT CLIENTID, 
                                  TELEPHONE2 
                           FROM   ADDRESS 
                           WHERE  TELEPHONE2 IS NOT NULL)T2 
                       ON T1.CLIENTID = T2.CLIENTID)T 

您可以在SQL Fiddle上找到完整的示例。
如果您对此有任何疑问,请告诉我。

于 2013-07-29T15:20:01.753 回答
-1

怎么样

select distinct ClientID, ClientName, Number1  
  from ...  
union
select distinct ClientID, ClientName, Number2
  from ...  
  where Number2 is not null    
于 2013-07-29T15:18:03.230 回答