我正在尝试根据条件从 CTE 中进行选择。
我为今天的时间段声明了一个变量(@PRD
)。它保存了我们当前所处时期的价值。
现在我想从一个表中进行选择,该表将根据我们是否在上半年来限制返回的信息。
例如,我们处于第 2 阶段,所以我希望从我的 CTE 返回的所有内容都介于 PRD 1 和 5 之间。如果我们处于第 6 阶段(5 之后),那么是的,我希望从表中返回所有内容。
这是我要完成的伪代码:
SELECT
CASE
WHEN @PRD <= 5
THEN (SELECT * FROM DISPLAY WHERE PERIOD IN (1,2,3,4,5))
ELSE (SELECT * FROM DISPLAY)
END
我收到一个错误:
当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
请对我如何做到这一点有任何想法?
谢谢 x
编辑/更新:
更多的代码涉及 CTE,而且非常长。底线是可以说我有这个 CTE
;WITH DISPLAY as (
select * from lots_of_things
)
SELECT * FROM DISPLAY
对此 CTE 进行常规选择后,它会返回如下所示的数据:
PERIOD (INT) DEPARTMENT GROUP BUDGET
1 ENERGY HE 500
2 ENERGY HE 780
3 ENERGY HE 1500
4 ENERGY HE 4500
5 ENERGY HE 400
6 ENERGY HE 3500
7 ENERGY HE 940
8 ENERGY HE 1200
如果当前周期是 1、2、3、4、5,我希望它只显示前 5 行。但是,如果我们处于 6、7、8、9 及以后的任何其他时期,则显示所有表格行。当前期间保存在变量@PRD 中,该变量是通过将今天的日期与表中保存的范围进行比较而得出的。该值是准确的,并且还键入 INT
希望这可以帮助