我想根据条件从CTE中进行选择。基于条件的TSQL SELECT
我今天宣布了一个变量(@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
我得到一个错误:
Only one expression can be specified in the select list when the subquery is not introduced with 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
我想让它显示我只是前5名如果我们当前的周期是1,2,3,4,5行。但是,如果我们处于像6,7,8,9以及其他任何时期那样显示ALL表行。当前时间保存在变量@PRD中,该变量通过比较今天的日期和表中的范围而得出。该值是准确的,也INT类型
希望这有助于
'CASE'是*表达式*,它返回一个*单个*值(每行)。你能不能显示更多你当前的代码 - 这会产生你显示的错误信息? –
那里有多少“时期”,它们与历年有何关系?你的逻辑看起来很奇怪:“我们处于第二阶段,所以我希望从我的CTE返回的一切都落在PRD 1和5之间!”!但我想如果这就是你需要的...... – Tony
嗨达米安。那是完整产生错误的代码。它是在一个cte的尾部...将更新以显示此 –