2015-04-08 67 views
0

下面的代码应该从多个表中跨2个数据库 抢多个值,但正如我试图实现 T-SQL select rows by oldest date and unique category解决我遇到了一个错误的位置我的代码的最后一行会说的一个问题“不正确语法靠近')'。“只选择最老的唯一的记录

--Create Table #tmp2(FK_clientids varchar(50)) 
--Create table #tmp (phonenums varchar(50)) 
Delete from #tmp2 
Delete from #tmp 
Use Database2 
INSERT INTO #tmp2 
SELECT fk_clientid 
FROM DM_ClientApplicants 
where DM_ClientApplicants.FK_ApplicationID in (39155) 
Use Database2 
INSERT INTO #tmp 
Select phonenum2 from DM_PhoneNumbers 
where FK_ApplicationID in 
(
    Select FK_clientIDs from #tmp2 
) 
INSERT INTO #tmp 
Select PhoneNum1 from DM_PhoneNumbers 
where FK_ApplicationID in 
(
    Select FK_clientIDs from #tmp2 
) 
INSERT INTO #tmp 
Select PhoneNum2 from DM_PhoneNumbers 
where FK_ApplicationID in 
(
    Select FK_clientIDs from #tmp2 
) 

INSERT INTO #tmp 
Select PhoneNum3 from DM_PhoneNumbers 
where FK_ApplicationID in 
(
    Select FK_clientIDs from #tmp2 
) 
INSERT INTO #tmp 
Select Partnerphonehome from DM_PhoneNumbers 
where FK_ApplicationID in 
(
    Select FK_clientIDs from #tmp2 
) 
INSERT INTO #tmp 
Select Partnerphonemobile from DM_PhoneNumbers 
where FK_ApplicationID in 
(
    Select FK_clientIDs from #tmp2 
) 
INSERT INTO #tmp 
Select Partnerphonework from DM_PhoneNumbers 
where FK_ApplicationID in 
(
    Select FK_clientIDs from #tmp2 
) 
Use Database1 
Select PhoneNum,sourcetable,c.FK_ApplicationID,SolRef,DT.Subject,dt.CreatedDate 
from (select PhoneNum,sourcetable,c.FK_ApplicationID,SolRef,DT.Subject,dt.CreatedDate, 
      row_number() over(partition by OrderNO order by dt.CreatedDate desc) rn 
     from Dial D 
     join Database2.dbo.DM_PhoneNumbers P on PhoneNum collate Latin1_General_CI_AS = PhoneNum1 
     join Database2.dbo.DM_ClientApplicants C on P.FK_ApplicationID = C.FK_ClientID 
     join Database2.dbo.DM_Sol S on C.FK_ApplicationID = S.FK_ApplicationID 
     join Database2.dbo.DM_ApplicationDetails AD on AD.FK_ApplicationID = S.FK_ApplicationID 
     join Database2.dbo.Tasks DT on DT.FK_ApplicationID = S.FK_ApplicationID 
where PhoneNum in 
(Select phonenums from #tmp) 

UPDATE:这么近“RN”支架是开放的,但如果我尝试关闭它的语句的其余部分是不理解,任何人都知道为什么吗?

回答

1

您的SQL语句的结束应该是:

Use Database1 
Select PhoneNum,sourcetable,FK_ApplicationID,SolRef,Subject,CreatedDate 
from 
(
    select PhoneNum,sourcetable,c.FK_ApplicationID,SolRef,DT.Subject,dt.CreatedDate 
    ,row_number() over(partition by OrderNO order by dt.CreatedDate desc) rn 
    from Dial D 
    join Database2.dbo.DM_PhoneNumbers P on PhoneNum collate Latin1_General_CI_AS = PhoneNum1 
    join Database2.dbo.DM_ClientApplicants C on P.FK_ApplicationID = C.FK_ClientID 
    join Database2.dbo.DM_Sol S on C.FK_ApplicationID = S.FK_ApplicationID 
    join Database2.dbo.DM_ApplicationDetails AD on AD.FK_ApplicationID = S.FK_ApplicationID 
    join Database2.dbo.Tasks DT on DT.FK_ApplicationID = S.FK_ApplicationID 
    where PhoneNum in 
    (
     Select phonenums from #tmp 
    ) 
)a -- add