2014-12-16 1 views
1

에 의해 그룹에서 @param를 사용하여 작동하지 않습니다동적 SELECT 나는 다음을 수행하려고 해요

SELECT CASE 
      WHEN @aggregation_zeit = 'day' THEN DAY 
      WHEN @aggregation_zeit = 'month' THEN MONTH 
      WHEN @aggregation_zeit = 'year' THEN YEAR 
     END            AS TIME_FIELD, 
FROM ... 
GROUP BY YEAR, 
     CASE 
       WHEN @aggregation_zeit = 'day' THEN MONTH 
       WHEN @aggregation_zeit = 'month' THEN MONTH 
     END, 
     CASE 
       WHEN @aggregation_zeit = 'day' THEN DAY 
     END 

를하지만, 그것이 포함되지 않기 때문에 그 MONTH 및 DAY는 선택 목록에서 유효하지 않은 말을 계속 집계 함수에서.

어떻게 알 수 있습니까? 알려 주시면 답을 변경할 수 있습니다하지 않을 경우

감사합니다, 펠릭스

+0

두 가지 문제는, 당신의 선택 1.) 당신의 CASE 문이 GROUP BY에 CASE 문 동일하지 않습니다, 당신이해야) 2.이어야한다 이 문자 필드로 ''를 사용하여 MONTH, YEAR로 견적을 제출하십시오. '일'. –

+0

두 CASE 문은 항상 동일해야합니까? 내 경우에는 SELECT에서 하나의 TIME_FIELD를 필요로하므로이 작업을 수행하지는 않지만 GROUP BY는 YEAR, MONTH, DAY 또는 YEAR, MONTH 또는 YEAR 중 하나 여야합니다. – Kiechlus

+0

IF를 사용하지 않고 쿼리를 여러 번 반복하지 않고도이 작업을 수행 할 수있는 다른 방법이 있습니까? – Kiechlus

답변

0

는 그 년, 월, 일이 테이블에서 숫자 열이되어 있으리라 믿고있어.

SELECT CASE 
      WHEN @aggregation_zeit = 'day' THEN CAST(DATEFROMPARTS([YEAR], [MONTH], [DAY]) AS VARCHAR(12)) 
      WHEN @aggregation_zeit = 'month' THEN STR([YEAR]) + '/' + STR([MONTH]) 
      WHEN @aggregation_zeit = 'year' THEN STR([YEAR]) 
     END            AS TIME_FIELD, 
FROM ... 
GROUP BY CASE 
      WHEN @aggregation_zeit = 'day' THEN CAST(DATEFROMPARTS([YEAR], [MONTH], [DAY]) AS VARCHAR(12)) 
      WHEN @aggregation_zeit = 'month' THEN STR([YEAR]) + '/' + STR([MONTH]) 
      WHEN @aggregation_zeit = 'year' THEN STR([YEAR]) 
     END 
+0

좋은 아이디어! 정렬 (앞에 0) 및 추가 공백과 관련된 몇 가지 문제가있었습니다. 오른쪽 ('0'+ LTRIM (RTRIM (STR ([TAG]))), 2) 나를 위해 일했다. – Kiechlus

0

또 다른 대안은 다음과 같습니다

SELECT [YEAR], 
     CASE WHEN @aggregation_zeit = 'day' OR @aggregation_zeit = 'month' THEN [MONTH] 
       ELSE NULL 
     END AS [MONTH], 
     CASE WHEN @aggregation_zeit = 'day' THEN [DAY] 
       ELSE NULL 
     END AS [DAY] 
FROM ... 
GROUP BY [YEAR], 
     CASE WHEN @aggregation_zeit = 'day' OR @aggregation_zeit = 'month' THEN [MONTH] 
       ELSE NULL 
     END AS [MONTH], 
     CASE WHEN @aggregation_zeit = 'day' THEN [DAY] 
       ELSE NULL 
     END AS [DAY] 
관련 문제