首页 > 解决方案 > 修复依赖于其他标志的标题列?

问题描述

我正在尝试根据其他标志填充标题列,并且我正在使用 case 语句来实现这一点。不幸的是,我遇到了结果问题。无论细节标志如何,每个主要的标题都应该相同。

代码:

SELECT Primary_Key, Detail_Flag, Flag_A, Flag_B,
  CASE WHEN Detail_Flag=0 THEN
    CASE WHEN Flag_A=1 AND Flag_B=1 THEN 1 
    ELSE 0 END 
  END AS IsCommercialFlag,

  CASE WHEN Flag_A=1 AND Flag_B=1 THEN 'Yes'
  ELSE 'No'
  END
  AS IsCommercialFlagCaption

FROM TableFlags 
WHERE Primary_Key IN (123, 456)
ORDER BY Primary_Key, Detail_Flag

实际结果:

在此处输入图像描述

预期结果:

在此处输入图像描述

标签: sqlsql-server

解决方案


看来您只需要 NULL 处理。考虑到您目前使用 ORACLE 作为您的 DBMS 产品,您可以尝试以下查询 -

SELECT 
 Primary_Key,
 Detail_Flag, 
 Flag_A, 
 Flag_B,
  CASE WHEN Detail_Flag=0 THEN
    CASE WHEN NVL(Flag_A, 1) = 1 AND NVL(Flag_B, 1) = 1 THEN 1 
    ELSE 0 END 
  END AS IsCommercialFlag,    
  CASE WHEN NVL(Flag_A, 1) = 1 AND NVL(Flag_B, 1) = 1 THEN 'Yes'
  ELSE 'No'
  END
  AS IsCommercialFlagCaption

FROM TableFlags 
WHERE Primary_Key IN (123, 456)
ORDER BY Primary_Key, Detail_Flag

如果您使用的是 MySQL,只需替换NVLIFNULL,对于 SQL SERVER 用户 ISNULL。


推荐阅读