【发布时间】:2014-10-24 13:21:36
【问题描述】:
我目前正在编写一个视图,如下所示,但我在最后五次选择时遇到了一些问题。我从一个主要是 int 值但包含一些 NULLS 的表中提取。我想要将这些“rep”列的任何 NULL 值输出为“N/A”,但是 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')
【问题讨论】:
-
这正是问题所在,一列只能有一种类型。将所有值转换为 VARCHAR,因此您可以在同一列上包含“N/A”和“1”。示例:CONVERT(VARCHAR(20),reps1+(1))
标签: sql sql-server tsql sql-server-2014