2014-01-23 69 views
0

我遇到了一个我继承的程序的问题。我需要调整查询,但是查询不起作用。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

感谢您对我所有的耐心的错误只发生

与亲切的问候

编辑:如果可能的话:大要避免修改查询。

+0

最后..荷兰人字段名。 :) – NickyvV

+0

你究竟在哪里添加了行'AND(aw1.Verwijderd = 0)'? – NickyvV

+0

进入两个主要select语句的where语句。将尝试编辑我的帖子,让他们跳出来。 @Marc_s感谢编辑!现在更可读! – User999999

回答

0

大家好,

感谢您所有的时间投入到我的问题。一双新鲜的眼睛(即使是一对非IT眼睛)突然发现了这个问题。在第一个查询中有一个支架太多(其中语句)

(DATEDIFF(day, verz1.BeginDatumAW, verz1.EindDatumAW) > 0)) 

最后一个支架不应该在那里。我被错误消息所蒙蔽,并在第二个查询中查找问题。旧的查询如何仍然能够产生有效的结果(即使语法无效)仍然让我感到困惑。查询本身将被重写以避免更多问题。

日Thnx再次所有的时间

随着亲切的问候

0

你不能别名选择表查询..

(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** 

是错在这里对所有表走样。

+1

这不是事实。尽管别名已经在第一个SELECT中设置(在UNION ALL之前),但您也可以别名其他列,但SQL对它们没有任何作用。看到这个演示:http://sqlfiddle.com/#!6/d41d8/14033 – NickyvV

相关问题