我想根據條件從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的尾部...將更新以顯示此 –