SQL Server 2008:关键字'AS'附近的语法不正确
我遇到了一个我继承的程序的问题。我需要调整查询,但是查询不起作用。SQL Server 2008:关键字'AS'附近的语法不正确
这是我得到的查询(不审判我,这不是我的查询:))
SELECT
SUM(DATEDIFF(day, verz1.BeginDatumAW, verz1.EindDatumAW) + 1) AS AantalDagen,
verz1.CodeBedrijf, verz1.CodeAfdeling, verz1.CodeSectie,
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = '00')) AS BSNS,
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_1
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = verz1.CodeAfdeling) AND (CodeGroep = '00')) AS AFD,
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_1
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = verz1.CodeAfdeling) AND (CodeGroep = verz1.CodeGroep) AND (CodeSectie = '00')) AS GRP,
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_1
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = verz1.CodeAfdeling) AND (CodeGroep = verz1.CodeGroep) AND (CodeSectie = verz1.CodeSectie)) AS SEC
FROM
Verzorging AS verz1
LEFT OUTER JOIN
AangepastWerk AS aw1 ON verz1.VerzorgingId = aw1.VerzorgingId
WHERE
(verz1.EindDatumAW <= @EndDate) AND
(verz1.BeginDatumAW >= @StartDate) AND
(aw1.Verwijderd = 0) AND <------------ First statement added
(aw1.NietErkend = 0 OR aw1.NietErkend IS NULL) AND
(DATEDIFF(day, verz1.BeginDatumAW, verz1.EindDatumAW) > 0))
GROUP BY
verz1.CodeBusiness, verz1.CodeBedrijf, verz1.CodeAfdeling, verz1.CodeGroep,
verz1.CodeSectie, verz1.TypeAWOfWO, verz1.TypeOngeval
HAVING
(verz1.TypeAWOfWO = 'A') AND (verz1.TypeOngeval = 'AO') OR
(verz1.TypeAWOfWO = 'Arbeidsongeval') OR
(verz1.TypeAWOfWO = 'arbeidsongeval')
UNION ALL
SELECT SUM(DATEDIFF(day, @StartDate, verz1.EindDatumAW) + 1) AS AantalDagen, verz1.CodeBedrijf, verz1.CodeAfdeling, verz1.CodeSectie,
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_3
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = '00')) AS BSNS,
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_1
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = verz1.CodeAfdeling) AND (CodeGroep = '00')) AS AFD,
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_1
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = verz1.CodeAfdeling) AND (CodeGroep = verz1.CodeGroep) AND
(CodeSectie = '00')) AS GRP,
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_1
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = verz1.CodeAfdeling) AND (CodeGroep = verz1.CodeGroep) AND
(CodeSectie = verz1.CodeSectie)) AS SEC
FROM Verzorging AS verz1 LEFT OUTER JOIN
AangepastWerk AS aw1 ON verz1.VerzorgingId = aw1.VerzorgingId
WHERE (verz1.EindDatumAW <= @EndDate)
AND (verz1.EindDatumAW >= @StartDate)
AND (verz1.BeginDatumAW < @StartDate)
AND (aw1.Verwijderd = 0) <------------ Second statement added
AND (aw1.NietErkend = 0 OR aw1.NietErkend IS NULL)
AND (DATEDIFF(day, verz1.BeginDatumAW, verz1.EindDatumAW) > 0)
GROUP BY verz1.CodeBusiness, verz1.CodeBedrijf, verz1.CodeAfdeling, verz1.CodeGroep, verz1.CodeSectie, verz1.TypeAWOfWO, verz1.TypeOngeval
HAVING (verz1.TypeAWOfWO = 'A') AND (verz1.TypeOngeval = 'AO') OR
(verz1.TypeAWOfWO = 'Arbeidsongeval') OR
(verz1.TypeAWOfWO = 'arbeidsongeval')
变化:在两种情况报表添加以下行:
AND (aw1.Verwijderd = 0)
我添加这个后,我不断收到以下子查询的问题(对于每个子查询,我得到相同的错误)。
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_3
WHERE (CodeBusiness = verz1.CodeBusiness) AND (CodeAfdeling = '00')) AS BSNS,
我得到的错误是:
消息156,级别15,状态1,行 'AS' 关键字近28
不正确的语法。
我似乎无法弄清楚我做了什么/出了什么问题。我希望一双清新的眼睛可能会看到我错过的东西。
注意:后UNION ALL
感谢您对我所有的耐心的错误只发生
与亲切的问候
编辑:如果可能的话:大要避免修改查询。
大家好,
感谢您所有的时间投入到我的问题。一双新鲜的眼睛(即使是一对非IT眼睛)突然发现了这个问题。在第一个查询中有一个支架太多(其中语句)
(DATEDIFF(day, verz1.BeginDatumAW, verz1.EindDatumAW) > 0))
最后一个支架不应该在那里。我被错误消息所蒙蔽,并在第二个查询中查找问题。旧的查询如何仍然能够产生有效的结果(即使语法无效)仍然让我感到困惑。查询本身将被重写以避免更多问题。
日Thnx再次所有的时间
随着亲切的问候
你不能别名选择表查询..
(SELECT TOP (1) RTRIM(OmschrijvingSectie) AS Expr1
FROM PEBSectie AS PEBSectie_1
WHERE (CodeBusiness = verz1.CodeBusiness) AND
(CodeAfdeling =verz1.CodeAfdeling) AND
(CodeGroep = verz1.CodeGroep) AND
(CodeSectie = verz1.CodeSectie)) **AS SEC**
是错在这里对所有表走样。
这不是事实。尽管别名已经在第一个SELECT中设置(在UNION ALL之前),但您也可以别名其他列,但SQL对它们没有任何作用。看到这个演示:http://sqlfiddle.com/#!6/d41d8/14033 – NickyvV
最后..荷兰人字段名。 :) – NickyvV
你究竟在哪里添加了行'AND(aw1.Verwijderd = 0)'? – NickyvV
进入两个主要select语句的where语句。将尝试编辑我的帖子,让他们跳出来。 @Marc_s感谢编辑!现在更可读! – User999999