2017-06-15 4 views
1

私は、レポートのソースとして使用するための質問をしています。 datepart(dw、GetDate())の出力を整数(月曜日は2)と比較しようとすると、奇妙な理由があります。私はなぜ私がiifステートメントで2つの整数を比較できなかったのかを調べ始めました。私は絶対に答えは見つけられませんでした。 がここに完全なコードです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 

このクエリのポイントは、それは月曜日であれば、昨日からデータを取得することで、金曜日(私は前後にこれを行う方法に行ってきました、これは、この反復回数の試みです)。

EDIT:エラーコードMsg 170、レベル15、状態1、行19 行19: '='の近くの構文が正しくありません。

+1

「iif」は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 
関連する問題