【问题标题】:Syntax Error near to 'WITH''WITH' 附近的语法错误
【发布时间】:2018-08-21 23:46:52
【问题描述】:

我有一个问题,当我在 SQL Server 2014 中执行查询时它正在工作,但是当我在 SQL Server 2005 中执行它时,我收到“'WITH'附近的语法错误”;有人能帮我吗?

这是我的查询:

WITH TMP AS 
(
    SELECT  
        INWI.Date ,
        Equipe_Cad.MatBCC,
        INWI.Matricule_FS,
        Equipe_Cad.Employe,
        Equipe_Cad.Equipe,Equipe_Cad.Societe,
        Projet.Projet,
        INWI.Quantite,
        RIGHT('0' + INWI.Tps_Net, 9) C 
    FROM
        INWI 
    INNER JOIN 
        Equipe_Cad ON INWI.Matricule_FS = Equipe_Cad .MatFS 
    INNER JOIN 
        Projet ON Projet.EtapeTraitement = 'INWI_PREPAID'  
    WHERE 
        INWI.Date = '02/03/2018'    
)
SELECT  
    Date,
    MatBCC AS Matricule_BCC,
    Matricule_FS,Employe AS Nom,Equipe,Societe,
    Projet,
    CAST(SUM(Quantite)AS int)AS Quantite , 
    SUM(CAST(LEFT(C, 2) AS DECIMAL(10,8)) + 
        CAST(SUBSTRING(C, 4, 2) AS DECIMAL(10,8)) / 60 + 
        CAST(SUBSTRING(C, 7, 2) AS DECIMAL(10,8)) / 3600) AS Temps_Effectif 
FROM 
    TMP 
GROUP BY 
    Date, MatBCC, Matricule_FS, Employe, Equipe, Projet, Societe

谢谢

【问题讨论】:

  • 显然 SQL Server 2005 不支持从 select 创建临时表的简写,而是将其切换为使用顶部查询作为子查询并从中选择。
  • 我不知道该怎么做,请您给我更多帮助
  • 使用WITH ....通用表表达式 (CTE) 功能是 SQL Server 2008 中的一项新功能 - 您无法运行此代码2005 年
  • 那我该怎么办?

标签: sql-server-2005 common-table-expression with-statement


【解决方案1】:

试试这个,它使用原始 WITH 查询作为别名为 x 的子查询,然后您从子查询中选择:

SELECT  
    x.Date,
    x.MatBCC AS Matricule_BCC,
    x.Matricule_FS,x.Employe AS Nom,x.Equipe,x.Societe,
    x.Projet,
    CAST(SUM(x.Quantite)AS int)AS Quantite , 
    SUM(CAST(LEFT(x.C, 2) AS DECIMAL(10,8)) + 
        CAST(SUBSTRING(x.C, 4, 2) AS DECIMAL(10,8)) / 60 + 
        CAST(SUBSTRING(x.C, 7, 2) AS DECIMAL(10,8)) / 3600) AS Temps_Effectif 
FROM 
    (
        SELECT  
        INWI.Date ,
        Equipe_Cad.MatBCC,
        INWI.Matricule_FS,
        Equipe_Cad.Employe,
        Equipe_Cad.Equipe,Equipe_Cad.Societe,
        Projet.Projet,
        INWI.Quantite,
        RIGHT('0' + INWI.Tps_Net, 9) C 
    FROM
        INWI 
    INNER JOIN 
        Equipe_Cad ON INWI.Matricule_FS = Equipe_Cad .MatFS 
    INNER JOIN 
        Projet ON Projet.EtapeTraitement = 'INWI_PREPAID'  
    WHERE 
        INWI.Date = '02/03/2018') AS x    
GROUP BY 
    x.Date, x.MatBCC, x.Matricule_FS, x.Employe, x.Equipe, x.Projet, x.Societe

【讨论】:

  • 我有另一个问题,但我不能在这里发布他们告诉我我没有权限,我想执行此代码DATEDIFF(second, 0, CAST(Temps AS time))/3600. As Temps_Effectif 但时间在 sql 2005 中不被接受并且当我输入日期时间时,它给了我一个错误的结果,而不是确切的数字!请帮帮我
  • 如你所见,sql server 2005中没有Time数据类型,请阅读这篇文章,它有一些想法。(stackoverflow.com/questions/2491146/…)
  • 我尝试过其他类型,如时间戳和日期时间,但不起作用,我不知道该怎么办!
  • 所以您想要以秒为单位的差异?还是您想使用毫秒来获得更高的精度?
  • 例如这是输入 1899-12-30 01:31:16.000 和输出是这样的 1.660833 操作是(小时 + 分钟/60 + 秒/3600)就像我们在第一个例子
猜你喜欢
  • 2020-01-03
  • 2019-09-08
  • 1970-01-01
  • 2013-06-22
  • 2017-08-31
  • 2023-03-03
  • 1970-01-01
  • 2016-02-16
  • 2017-01-12
相关资源
最近更新 更多