我正在尝试根据帐户的期间和类型选择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
答案 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