复杂查询不正确的语法错误
Complex Query Incorrect Syntax Error
我曾尝试寻找解决方案,但未能找到适合这种情况的解决方案。
首先我必须说我的 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 中 运行 它 运行 没问题,没有错误。但是当我在这个查询中尝试 运行 它时,我得到一个错误,'Select @root As' 下的红色波浪线告诉我以下内容:
Incorrect Syntax near 'Select'.
Expecting ')', EXCEPT, or UNION
我不知道如何解决这个问题。如果我删除最后一个 'Left Join' 行,查询 运行 没问题。
有什么想法吗?
而不是最后一个 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
然后在第一个 SELECT
的列中包含 sr.rootsource
。
我曾尝试寻找解决方案,但未能找到适合这种情况的解决方案。
首先我必须说我的 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 中 运行 它 运行 没问题,没有错误。但是当我在这个查询中尝试 运行 它时,我得到一个错误,'Select @root As' 下的红色波浪线告诉我以下内容:
Incorrect Syntax near 'Select'.
Expecting ')', EXCEPT, or UNION
我不知道如何解决这个问题。如果我删除最后一个 'Left Join' 行,查询 运行 没问题。
有什么想法吗?
而不是最后一个 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
然后在第一个 SELECT
的列中包含 sr.rootsource
。