我在使用SQL语句时遇到困难。我有一个KPI(关键绩效指标),也可能有一个上限和下限。设置KPI的人可以选择设置两者,或者两者都绑定。我想在仪表板上显示一条消息,该消息一目了然,表明该值是否在范围内。出于我们的目的,可以将空值视为界限,而不必明确打破哪个界限。
所以基本上,我正在尝试构建如下语句:
Check if the kpi_lower_bound is null or not
If it is not null, check that the kpi_value > kpi_lower_bound
Check if the kpi_upper_bound is null or not
If it is not null, check that the kpi_value < kpi_lower_bound
If both statements pass or both are null, return "within bounds".
If either statement fails, return "out of bounds."
我可以用类似这样的语句来检查边界的任何一侧
SELECT
IF(kpi_lower_bound IS NOT NULL, (IF(kpi_value < kpi_lower_bound,"Out of lower bounds","Within lower bounds")), "It's null") AS "lower bound break",
但是我不知道如何将这样的多个if语句合并到一个大的条件检查中。
任何帮助将不胜感激。
答案 0 :(得分:0)
尝试使用CASE WHEN
SELECT
cast when kpi_lower_bound IS NOT NULL
then case when kpi_value < kpi_lower_bound then 'Out of lower bounds' else 'Within lower bounds' end
else 'It''s null' end AS "lower bound break"
答案 1 :(得分:0)
我们可以尝试使用的一种技巧是使用COALESCE
并使用以下逻辑替换缺失的边界:
2147483647
-2147483648
然后使用CASE
表达式:
SELECT
CASE WHEN kpi_value < COALESCE(kpi_lower_bound, -2147483648) OR
kpi_value > COALESCE(kpi_upper_bound, 2147483647)
THEN 'out of bounds'
ELSE 'within bounds' END AS bounds
FROM yourTable;
这里的窍门是,当kpi_lower_bound
为NULL
时,将被-2147483648
所取代,即很小的数字,在此以下我们不希望{ {1}}可以达到。这样可以为下限检查自由通行任何kpi_value
的{{1}}。同样的逻辑也适用于kpi_value
值和上限检查。