2017-06-15 77 views
1

我有一个查询,我一直在修补以用作报告的来源。 由于某些奇怪的原因,当我尝试将datepart(dw,GetDate())的输出与一个整数(周一为2)进行比较时,它给了我一个错误,告诉我不正确的语法。然后我开始研究为什么我无法比较iif声明中的两个整数,并且我发现绝对没有答案。 这里是完整的代码(我去来回如何做到这一点,这是本次迭代的尝试)将datepart的输出与整数进行比较的错误

DECLARE @dp integer,@d integer 
    set @dp =DATEpart(dw,GETDATE()) 
    set @d = 2 
    SELECT TOP 100 PERCENT CUST_ORDER_LINE.PRODUCT_CODE 
     ,CUSTOMER_ORDER.ID 
     ,CUSTOMER_ORDER.CUSTOMER_ID 
     ,CUST_ORDER_LINE.PART_ID 
     ,CUST_ORDER_LINE.MISC_REFERENCE 
     ,CUST_ORDER_LINE.COMMODITY_CODE 
     ,CUSTOMER_ORDER.SALESREP_ID 
     ,CUSTOMER_ORDER.TERRITORY 
     ,CUST_ORDER_LINE.ORDER_QTY * CUST_ORDER_LINE.UNIT_PRICE AS Amount 
     ,CUSTOMER_ORDER.ORDER_DATE 
    FROM CUST_ORDER_LINE 
    INNER JOIN CUSTOMER_ORDER ON CUST_ORDER_LINE.CUST_ORDER_ID = CUSTOMER_ORDER.ID 
    WHERE (
      iif(@dp = @d,CUSTOMER_ORDER.ORDER_DATE BETWEEN (dateadd(day, datediff(day, 0, getdate()), 0) - 3) AND (dateadd(day, datediff(day, 0, getdate()),0))), 
      CUSTOMER_ORDER.ORDER_DATE BETWEEN (dateadd(day, datediff(day, 0, getdate()), 0) - 1)) AND (dateadd(day, datediff(day, 0, getdate()), + 1)))) 
      ) 
    ORDER BY CUSTOMER_ORDER.ORDER_DATE DESC 

此查询的一点是,从昨天拉的数据,以及周五如果是周一。编号:错误代码消息170,级别15,状态1,行19 行19:'='附近语法错误。

+1

'iif' not in 2008. https://docs.microsoft.com/en-us/sql/t-sql/functions/logical-functions-iif-transact-sql。 – SQLChao

回答

3

IIF是在2012年。您可以尝试使用CASE来代替。

DECLARE @dp integer,@d integer 
    set @dp =DATEpart(dw,GETDATE()) 
    set @d = 2 
    SELECT TOP 100 PERCENT CUST_ORDER_LINE.PRODUCT_CODE 
     ,CUSTOMER_ORDER.ID 
     ,CUSTOMER_ORDER.CUSTOMER_ID 
     ,CUST_ORDER_LINE.PART_ID 
     ,CUST_ORDER_LINE.MISC_REFERENCE 
     ,CUST_ORDER_LINE.COMMODITY_CODE 
     ,CUSTOMER_ORDER.SALESREP_ID 
     ,CUSTOMER_ORDER.TERRITORY 
     ,CUST_ORDER_LINE.ORDER_QTY * CUST_ORDER_LINE.UNIT_PRICE AS Amount 
     ,CUSTOMER_ORDER.ORDER_DATE 
    FROM CUST_ORDER_LINE 
    INNER JOIN CUSTOMER_ORDER ON CUST_ORDER_LINE.CUST_ORDER_ID = CUSTOMER_ORDER.ID 
    WHERE 
     CUSTOMER_ORDER.ORDER_DATE BETWEEN CASE 
              WHEN @dp = @d THEN (dateadd(day, datediff(day, 0, getdate()), 0) - 3) 
              ELSE (dateadd(day, datediff(day, 0, getdate()), 0) - 1) 
             END 
           AND CASE 
             WHEN @dp = @d THEN (dateadd(day, datediff(day, 0, getdate()),0)) 
             ELSE (dateadd(day, datediff(day, 0, getdate()), + 1)) 
            END 

    ORDER BY CUSTOMER_ORDER.ORDER_DATE DESC 
相关问题