조건에 따라 CTE에서 select를 수행하려고합니다.조건에 따른 TSQL SELECT
오늘의 기간에 대해 선언 한 변수가 있습니다 (@PRD
). 현재 보유하고있는 기간의 가치를 보유합니다.
이제 나는 상반기에 있는지 여부에 따라 반환되는 정보를 제한하는 표를 선택하고 싶습니다.
예를 들어, 우리는 기간 2이므로 PRD 1과 5 사이의 모든 CTE에서 반환 된 모든 항목을 원합니다. 기간 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를 포함 정말 깁니다. 내가 원하는
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 개 표시하려면 : 결론은 다음과 같다 데이터를 반환, 나는이 CTE
;WITH DISPLAY as (
select * from lots_of_things
)
SELECT * FROM DISPLAY
정기적이 CTE에 선택 할 데가 있다고 할 수있다 현재 기간이 1,2,3,4,5이면 행입니다. 그러나 우리가 6,7,8,9와 같은 다른 기간에있는 경우 모든 테이블 행을 표시합니다. 현재 기간은 오늘 날짜와 테이블에 보유 된 범위를 비교하여 파생 된 변수 @PRD에 보관됩니다. 값은 정확하고도이이 해결책이 될 수
'사례'는 * 단일 값 (행당)을 반환하는 * 표현식 *입니다. 표시하고있는 오류 메시지를 생성하는 현재 코드를 더 표시 할 수 없습니까? –
몇 개의 "마침표"가 있으며 그 해의 연도와 어떻게 관련이 있습니까? 당신의 논리는 이상하게 보입니다. "우리는 2 기가되었으므로 PRD 1과 5 사이의 CTE에서 반환 된 모든 것을 원합니다!" 그러나 그것이 당신이 필요로하는 것이라면 나는 생각합니다 ... – Tony
안녕 Damien. 그것이 오류를 생성하는 코드였습니다. 그것은 꼬리 끝에 cte ...이었다 이것을 보여주기 위해 갱신 할 것이다 –