TSQL-在WHERE子句中使用CASE并使用<或=签名

时间:2011-10-13 16:04:20

标签: tsql

我正在尝试根据帐户的期间和类型选择ID。每个帐户类型都有不同的期间。我尝试了以下代码,但它不喜欢<运营商或任何其他运营商。由于系统限制,我无法使用临时表。至少有6种类型的帐户。 我搜索了不同的解决方案,但我找不到任何东西。任何帮助表示赞赏。 谢谢

DECLARE @Inputperiod as INT 
DECLARE @Start as INT
DECLARE @Enddate as INT

    SET @Inputperdiod ='2009';
    SET @Start=@Inputperiod-1;
    SET @Enddate=@Inputperiod +1;

        SELECT ID, Period, Type 
        FROM
        TABLE1

        WHERE 

        Period= CASE

        WHEN Type='ASSET' THEN Period < @inputperiod 
        WHEN Type='Liability' THEN Period BETWEEN @start AND @enddate
        END

2 个答案:

答案 0 :(得分:3)

您无法使用CASE替换查询的任意位。您需要使用

   SELECT ID, Period, Type 
   FROM TABLE1
   WHERE (Type='ASSET' AND Period < @inputperiod ) 
    OR    (Type='Liability' AND Period BETWEEN @start AND @enddate)

答案 1 :(得分:1)

你误解了案件陈述。 THEN子句中的内容是CASE语句返回的内容(如if ... then ...语句)。你编写它的方式,它返回一个布尔值。

试试这个......

SELECT ID, Period, Type
FROM Table1
WHERE Type='ASSET' AND Period < @inputperiod
UNION
SELECT ID, Period, Type
FROM Table1
WHERE Type='Liability' AND Period BETWEEN @start AND @enddate