复杂查询不正确的语法错误

时间:2016-10-06 15:58:42

标签: sql sql-server tsql variables left-join

我试图寻找解决方案,但我找不到符合这种情况的解决方案。

首先,我必须说我的SQL很生疏。以下查询是迄今为止我做过的最复杂的查询。

以下是查询:

Declare @root varchar(Max)
set @root = ''

Select 
    ib.irrnum, ib.status, pu.probtype, 
    ib.submitby, ta.[Task Action], ib.area, co.cost, 
    rc.rootcause, ib.jobnum
From
    tbl_irrbase ib
Left Join 
    tbl_cost co On ib.irrnum = co.irrnum
Left join 
    (Select Distinct probtype, irrnum 
     From tbl_probtype) pu On ib.irrnum = pu.irrnum
Left Join 
    (Select Distinct rootcause, irrnum 
     From tbl_rtcause) rc On ib.irrnum = rc.irrnum
Left Join 
    (Select TOP 1 
         (owner + Space(1) + Convert(varchar(10), senddate, 101) + Space(1) + taskitem) As 'Task Action', 
         irrnum 
     From 
         (select * From tbl_taskaction) ta 
     Order by 
         senddate Desc, sendtime Desc) ta On ib.irrnum = ta.irrnum
left Join 
    (Select [@root] = @root + rs.rootsource + Space(3), irrnum 
     From tbl_rtsource rs 
     Where rs.entrydate Between '10/04/2016' And '10/06/2016' 
     Select @root As 'Root Source') sr On ib.irrnum = sr.irrnum
Where 
    ib.submitedate between '09/28/2016' And '10/05/2016'

我的问题是最后一个Left Join行。如果我取出整个Select语句并在SSMS中运行它运行正常,没有错误。但是当我尝试在这个查询中运行它时,我得到一个错误,红色波浪线在'选择@root As'告诉我以下内容:

  

'选择'附近的语法错误   期待')',EXCEPT或UNION

我不知道如何解决这个问题。如果我删除最后一次“离开加入”'行查询运行正常。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

而不是最后一次LEFT JOIN,尝试这样的事情:

CROSS APPLY (
    SELECT (
        SELECT rs.rootsource + Space(3)
        From tbl_rtsource rs 
        Where rs.entrydate Between '10/04/2016' And '10/06/2016' 
        AND rs.irrnum=ib.irrnum
        FOR XML PATH('')
    ) AS rootsource
) sr

然后在第一个sr.rootsource的列中加入SELECT