SQL Server子查询导致错误

时间:2018-05-16 00:06:22

标签: sql sql-server

我习惯了Firebird查询,现在我需要在SQL Server中创建一个,但是我的子查询出错了。

错误:

  

Msg 102,Level 15,State 1,Line 14
  ')'

附近的语法不正确

查询:

SELECT 
    CVE_ART, IIF (CANTIDAD < 0, 0, CANTIDAD) AS CANTIDAD    
FROM
    (SELECT     
         CVE_ART,    
         SUM((CANT * SIGNO * -1) / 6) AS CANTIDAD    
     FROM   
         MINVE05    
     WHERE     
         DATEDIFF(MONTH, FECHA_DOCU, CURRENT_TIMESTAMP) >  0    
         AND DATEDIFF(MONTH, FECHA_DOCU, CURRENT_TIMESTAMP) <= 6    
         AND CVE_CPTO IN (2, 4, 51)    
         AND ALMACEN = 1    
     GROUP BY 
         CVE_ART)

2 个答案:

答案 0 :(得分:5)

您需要为派生表

指定别名
ArrayList<Tile> board = json.fromJson(ArrayList.class, Tile.class,
    Gdx.files.internal("data/tiles.json").readString());

答案 1 :(得分:0)

为什么不写这样的查询?

SELECT CVE_ART,    
       (CASE WHEN SUM((CANT*SIGNO*-1)/6) < 0 THEN 0
             ELSE SUM((CANT*SIGNO*-1)/6)
        END) AS CANTIDAD    
FROM   MINVE05    
WHERE DATEDIFF(MONTH, FECHA_DOCU, CURRENT_TIMESTAMP) > 0  AND  
      DATEDIFF(MONTH, FECHA_DOCU, CURRENT_TIMESTAMP) <= 6    
      CVE_CPTO IN (2, 4, 51) AND  
      ALMACEN = 1    
GROUP BY CVE_ART ;

除了占用空间之外,子查询实际上对查询没有太大作用。使用DATEDIFF()很奇怪。它计算两个日期之间的边界。所以,第一个是说两个日期的日历月份不同。所以,2018-01-31和2018-02-01符合条件,但2018-01-01和2018-01-31不符合。