2014-10-24 2 views
0

현재 아래에 표시된보기를 스크립팅하고 있지만 최근 5 회 선택 사항에 대해 몇 가지 문제가 있습니다. 나는 대부분 int 값이지만 일부 NULL을 포함하는 테이블을 사용하고 있습니다. 내가 원하는 건 'N/A'로 출력되는 'rep'열에 대한 NULL 값을 말합니다. 그러나 case 문에서 일부 논리가 N/A를 INT로 변환하려고하면 오류가 발생합니다.불필요한 변환으로 사례 명세서 오류가 발생했습니다.

어쨌든 case 문에서 줄을 따라 생각해 보았습니다. NULLS를 N/A로 설정하고 INT로 값을 추가하려고했지만 넘어지지 않을 수도있는 부분에 대해 감사히 생각합니다.

감사합니다.

SELECT 
--Name 
ExerciseCultures.Name, 
--Weight 
CASE 
    WHEN weight IS NULL THEN '0' 
    ELSE 
    CASE 
     WHEN Type = 'Isolation' THEN 
     CASE 
      WHEN reps1 < '12' 
       AND reps2 < '12' 
       AND reps3 < '12' THEN weight 
      ELSE 
      CASE 
       WHEN exercisecultures.name IN ('Hammer Curls', 'Concentration Curls') THEN workoutsessions.weight + (2.0) 
       ELSE WorkoutSessions.weight + (2.5) 
      END 
     END 
     ELSE 
     CASE 
      WHEN Type = 'Compound' THEN 
      CASE 
       WHEN name = 'Bench Press' THEN 
       CASE 
        WHEN reps1 < '3' 
         AND reps2 < '3' 
         AND reps3 < '3' THEN weight 
        ELSE workoutsessions.weight + (2.5) 
       END 
       ELSE 
       CASE 
        WHEN reps1 < '5' 
         AND reps2 < '5' 
         AND reps3 < '5' THEN weight 
        ELSE workoutsessions.weight + (2.5) 
       END 
      END 
     END 
    END 
END AS Weight, 
-- Reps1 
CASE 
    WHEN Reps1 = NULL THEN 'N/A' 
    ELSE 
    CASE 
     WHEN Type = 'Isolation' THEN 
     CASE 
      WHEN reps1 < '12' 
       AND reps1 >= '8' THEN reps1 + (1) 
      ELSE '8' 
     END 
     ELSE '5' 
    END 
END AS Reps1, 
-- Reps2 
CASE 
    WHEN Reps2 IS NULL THEN 'N/A' 
    ELSE 
    CASE 
     WHEN Type = 'Isolation' THEN 
     CASE 
      WHEN reps2 < '12' 
       AND reps2 >= '8' THEN reps2 + (1) 
      ELSE '8' 
     END 
     ELSE '5' 
    END 
END AS Reps2, 
--Reps3 
CASE 
    WHEN Reps3 IS NULL THEN 'N/A' 
    ELSE 
    CASE 
     WHEN Type = 'Isolation' THEN 
     CASE 
      WHEN reps3 < '12' 
       AND reps3 >= '8' THEN reps3 + (1) 
      ELSE '8' 
     END 
     ELSE '5' 
    END 
END AS Reps3, 
--Reps4 
CASE 
    WHEN Reps4 IS NULL THEN 'N/A' 
    ELSE 
    CASE 
     WHEN Type = 'Isolation' THEN 
     CASE 
      WHEN reps4 < '12' 
       AND reps4 >= '8' THEN reps4 + (1) 
      ELSE '8' 
     END 
     ELSE '5' 
    END 
END AS Reps4, 
--Reps5 
CASE 
    WHEN Reps5 IS NULL THEN 'N/A' 
    ELSE 
    CASE 
     WHEN Type = 'Isolation' THEN 
     CASE 
      WHEN reps5 < '12' 
       AND reps5 >= '8' THEN reps5 + (1) 
      ELSE '8' 
     END 
     ELSE '5' 
    END 
END AS Reps5 
FROM workoutsessions 
     JOIN exercisecultures 
     ON workoutsessions.ExerciseID = ExerciseCultures.ExerciseID 
     JOIN workoutdates 
     ON workoutsessions.WorkoutID = Workoutdates.WorkoutID 
      AND workoutdates.date = (SELECT Max(date) 
            FROM WorkoutDates 
            WHERE workouttype = 'Pull') 
+0

정확히 문제는 하나의 열에는 하나의 유형 만있을 수 있습니다. 모든 값을 VARCHAR로 변환하면 같은 열에 'N/A'와 '1'을 가질 수 있습니다. 예 : CONVERT (VARCHAR (20), reps1 + (1)) – mxix

답변

0

조건문을 작성하기 전에 정수 유형을 varchar 유형으로 변환 해보십시오. 변수/임시 테이블을 생성하고이 열을 VARCHAR로 지정한 다음이 임시 테이블에서 데이터를 추출하거나이를 원하지 않으면 쿼리의 각 정수 열을 다음과 같이 캐스팅해야합니다. 이 ...

case when CAST(Reps1 AS varchar(100)) = Null then 'N/A' 
    else 
관련 문제