sql - 修复依赖于其他标志的标题列?
问题描述
我正在尝试根据其他标志填充标题列,并且我正在使用 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
实际结果:
预期结果:
解决方案
看来您只需要 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,只需替换NVL
为IFNULL
,对于 SQL SERVER 用户 ISNULL。
推荐阅读
- c++ - 类 std::result_of 中没有名为“类型”的类型
- node.js - MongoDB 不会推送到数组
- javascript - 如何在 MongoDB 中自定义增量 ID 或数字?
- ios - UITableViewCell 高度根据行内容使用自动布局动态计算
- haskell - 函数重载
- c++ - 在 Ubuntu 中使用 clang 编译 c++17 代码时找不到 string_view
- swift - 在不创建新 UIImage/CGImage 的情况下更改 UIImage 的一个像素的颜色
- centos - ImageMagick - 在 ubuntu 而不是 centos 上工作的命令
- dropdown - 如何创建自动更新依赖下拉列表?
- database - 如何将此文件转换为 sqlite 数据库?