我有一个像波纹管图像的数据集。
我需要在数据集中
如果没有,则会在OpenSegment=yes
中出现红色等级
如果不是,则在OpenSegment=yes
中存在等级琥珀色
然后在OpenSegment=yes
为此我写了
COALESCE(
CASE WHEN airag.FK_MasterRAGRatingID=1 THEN 'yes' ELSE '' END,
CASE WHEN airag.FK_MasterRAGRatingID=2 THEN 'yes' ELSE '' END,
CASE WHEN airag.FK_MasterRAGRatingID=4 THEN 'yes' ELSE '' END
)
但没有工作。
放置ELSE NULL
答案 0 :(得分:3)
我甚至认为你在这里需要三个单独的CASE
表达式:
SELECT
CASE WHEN airag.FK_MasterRAGRatingID IN (1, 2, 4) THEN 'yes' END AS OpenSegment
-- other columns
FROM yourTable
无论您向我们展示的表格是否派生,上述逻辑都应有效。
ELSE
表达式的默认CASE
条件为NULL
。因此,上面会将非匹配行的开放段标记为NULL
。如果要使用其他值,请提供明确的ELSE
:
CASE WHEN airag.FK_MasterRAGRatingID IN (1, 2, 4) THEN 'yes' ELSE '' END
这假设你想要使用空字符串,但它可以是任何值。
答案 1 :(得分:1)
Tim Biegeleisen给出了很好的答案,但是当你在Grade栏而不是ID上时,你不应该看到这个问题吗?
所以代码就是;
SELECT
CASE WHEN airag.Grade IN ('Red', 'Amber', 'Blue') THEN 'yes' END AS OpenSegment
-- other columns
FROM yourTable
答案 2 :(得分:0)
试试这个,COALESCE
用于第一个Not NULL
值,如果您在else部分中提供EMPTY('')
,则认为该列有一些值。
所以你必须使用NULL
而不是''。
COALESCE(
CASE WHEN airag.FK_MasterRAGRatingID=1 THEN 'yes' ELSE NULL END,
CASE WHEN airag.FK_MasterRAGRatingID=2 THEN 'yes' ELSE NULL END,
CASE WHEN airag.FK_MasterRAGRatingID=4 THEN 'yes' ELSE NULL END
)
如果我们想在NULL列中使用Empty,我们必须使用如下所示:
ISNULL(COALESCE(
CASE WHEN airag.FK_MasterRAGRatingID=1 THEN 'yes' ELSE NULL END,
CASE WHEN airag.FK_MasterRAGRatingID=2 THEN 'yes' ELSE NULL END,
CASE WHEN airag.FK_MasterRAGRatingID=4 THEN 'yes' ELSE NULL END
),'')
希望这就是你所需要的:
SELECT ISNULL(CASE WHEN airag.FK_MasterRAGRatingID=1 THEN 'yes'
ELSE
CASE WHEN airag.FK_MasterRAGRatingID=2 THEN 'yes'
ELSE
CASE WHEN airag.FK_MasterRAGRatingID=4 THEN 'yes' ELSE NULL END END END
,'')