【发布时间】:2019-04-11 06:57:29
【问题描述】:
我正在尝试创建一个列,其值有条件地基于已指定的 DB 列。
我有 6 列:
ColumnA
ColumnB
ColumnC
ColumnD
ColumnE
ColumnF
我有一个查询,用于创建此列CUSTOMCODE,它将根据 6 列的值确定,无论哪一个为空。
我一直在使用 CASE 语句来尝试生成我想要的结果,但是有几行返回 null。我的case语句的逻辑如下
CASE
WHEN ColumnA IS NOT NULL and ColumnB IS NOT NULL
THEN ColumnA + '-' + ColumnC + '-' + ColumnD + '-' + ColumnB
WHEN ColumnA IS NOT NULL and ColumnB IS NULL
THEN ColumnA + '-' + ColumnC + '-' + ColumnD
WHEN ColumnE IS NOT NULL
THEN ColumnE + '-' + ColumnF
END AS CUSTOMCODE
注意此数据库中的数据,在此示例中,ColumnB 对于每一行都是 NULL。
当此查询运行时,对于 ColumnA, ColumnC, and ColumnD 为非 null 的第一行,它会正确返回第一种情况,并且 CUSTOMCODE 会产生非 null 值。
对于第二行,相同的ColumnA, ColumnC, and ColumnD 也不为空,它为 CUSTOMCODE 返回一个 NULL 值,我不知道为什么。
以及我们的后端的结构方式和数据的输入方式,如果这 3 列为空,则 ColumnE and ColumnF are not null,但是对于这种情况的行,它也会导致 CUSTOMCODE 为空。
CASE 声明中是否缺少某些内容,或者我是否需要对其进行重组或做其他事情?
【问题讨论】:
-
一些示例数据在这里会有很长的路要走。 Start Here 根据需要编辑您的问题。
-
我将处理示例数据。真实的数据和环境存在于私有敏感网络上,所以我必须尽可能地概括。我将重新编辑更多细节以更加清晰。
标签: sql sql-server sql-server-2012 concatenation case