我有一个像下面的图像一样的数据集。我需要在数据集中
等级红色在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后的结果

发布于 2017-11-15 09:02:48
我甚至不认为这里需要三个单独的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这将假设您希望使用空字符串,但它可能是任何值。
发布于 2017-11-15 09:11:04
的回答很好,但是看看这个问题,你不应该在年级专栏而不是ID上做这个案例吗?
所以代码应该是;
SELECT
CASE WHEN airag.Grade IN ('Red', 'Amber', 'Blue') THEN 'yes' END AS OpenSegment
-- other columns
FROM yourTable发布于 2017-11-15 08:57:47
尝试一下,COALESCE用于第一个Not NULL值,如果在column部分中给出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
)如果我们想在空列中空,我们必须使用如下所示:
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
,'')https://stackoverflow.com/questions/47303067
复制相似问题