TSQL - INSERT中的多个值(由于连接)

时间:2017-02-22 02:04:51

标签: sql sql-server tsql

我试图将数据从一个数据库插入另一个数据库。这是我到目前为止在选择方面所做的:

WITH CTE AS
(
    SELECT phon_linkID, phon_phonNumber, ROW_NUMBER() OVER (PARTITION BY phon_phonNumber ORDER BY phon_linkID) AS RN
    FROM phone
)
DELETE FROM CTE WHERE RN<>1

由于每个人的记录可以有多个电话号码链接到他们,我最终会为每个人提供多个记录,这显然不会起作用,因为当我实际插入数据时,我最终会得到重复记录。

问题是,我需要拥有每条记录的所有电话号码,只显示在不同的字段(家庭电话,工作电话,手机)。

任何想法,除了在每个电话/电子邮件链接的单独插入声明中这样做?

--------编辑:------------------------------------- ----------------------------

好的,我没有给你足够的信息。你的两个答案都很好,所以非常感谢(@Horaciux,@ John Wu)。

但是,没有phoneType列,只有电话号码。话虽这么说,因为每个手机都以04开头,每个家用手机都有其他东西,我可以很容易地区分这两种手机类型。

虽然电话表中有重复,所以我必须删除这些,最有可能通过CTE,不应该太难。

所以,对于这两个电话号码,我最终会得到类似的结果:

{{}}

我的重复删除将是这样的:

 var url = tmp + data.rateName;

2 个答案:

答案 0 :(得分:2)

两个简单的步骤。

  1. 摆脱电话号码表的连接。

  2. 使用select子句中的子查询查找每条记录的电话号码,每种类型的电话一个。实施例

    SELECT sP.pers_FirstName,
           sP.pers_LastName,
           (SELECT Phon_Number FROM Phone p JOIN PhoneLink pl ON pl.PhoneLinkID = p.PhoneLinkID WHERE pl.Person_ID = sP.pers_personID AND pl.Type = 'WORK') WorkPhone,
           (SELECT Phon_Number FROM Phone p JOIN PhoneLink pl ON pl.PhoneLinkID = p.PhoneLinkID WHERE pl.Person_ID = sP.pers_personID AND pl.Type = 'HOME') HomePhone
    FROM person
    

答案 1 :(得分:2)

在不知道你的桌子结构的情况下,我会举一些例子。

select person.id,
  max(case when phone.type='home' then phone.vlaue else 0 end) 'home',
  max(case when phone.type='work' then phone.vlaue else 0 end) 'work'
from person,phone where...
group by person.id

然后使用此查询加入所需的所有其他表