2016-08-08 9 views
1

構文に問題がある場合は、数値と日付範囲に基づいて結果を返す必要があります(6,2,2の場合は他の日付範囲)。BETWEEN日付を使用するWHERE句のT-SQL CASE

DECLARE @Test TABLE 

(
ID NVARCHAR(10) 
,Number INT 
,[Date] DATETIME 

) 
INSERT INTO @Test VALUES ('TG32',6,'20160715') 
INSERT INTO @Test VALUES ('TG47',6,'20160803') 
INSERT INTO @Test VALUES ('AG9',6,'20160805') 
INSERT INTO @Test VALUES ('BF27',2,'20160804') 
INSERT INTO @Test VALUES ('QD65',2,'20160802') 
INSERT INTO @Test VALUES ('F98',0,'20160806') 
INSERT INTO @Test VALUES ('GC5',0,'20160731') 
INSERT INTO @Test VALUES ('HT76',0,'20160802') 
INSERT INTO @Test VALUES ('KL81',0,'20160805') 
INSERT INTO @Test VALUES ('WR52',0,'20160802'); 

SELECT TOP 10 * FROM @Test 

WHERE [Date] = CASE WHEN Number IN ('6','2') THEN ([Date] BETWEEN CAST(GETDATE() - 6 AS date) AND GETDATE()) 
ELSE ([Date] BETWEEN CAST(GETDATE() - 1 AS date) AND GETDATE()) END 

答えて

0

あなたはそれが機能に似ているif then elseようにされていませんSQLの場合には、このようにCASEを使用することはできません(テストif_yes;?if_not)句が返すべきところで

WHERE [Date] BETWEEN CAST(GETDATE() - CASE WHEN Number IN ('6','2') THEN 6 ELSE 0 END AS date) AND GETDATE() 
0

CASE一つの値ではなく、みとめ値...全て以下のような

てみ組合..

SELECT TOP 10 * FROM @Test 
WHERE number in (6,2) and [Date]BETWEEN CAST(GETDATE() - 6 AS date) AND GETDATE() 
union all 
SELECT TOP 10 * FROM @Test 
WHERE number not in (6,2) and [Date] BETWEEN CAST(GETDATE() - 1 as date) AND GETDATE()