连接字符串,基于 Case 语句

Posted

技术标签:

【中文标题】连接字符串,基于 Case 语句【英文标题】:Concatenating Strings, based on Case Statement 【发布时间】:2015-12-03 20:56:08 【问题描述】:

我需要将注释附加到每日报告中,其中注释根据值存储在不同的表中。

即注释存储在注释表中,在多条记录上,基于注释中记录数的值为 1、2、3 等的 LineNo 列。 注释行数可变

我想在输出中选择注释并将这 3 个字段连接在一起作为一列;

即:

Select (Concat Notes Line1, Notes Line2 Notes Line3), 
       UserName, 
       NotesDate
From   notes 
Where  NoteType=2 
and    RefNo in (SELECT RefNo from Report);

我查看了使用 Case 和 Concat 的各种解决方案,但似乎都没有。存储过程中已经有一个 Join 来创建报表。

【问题讨论】:

看看这是否有帮助:***.com/questions/19098582/listagg-alternative-in-db2 【参考方案1】:

以下应该有效:

Select Line1 || Line2 || Line3, UserName, NotesDate From notes Where NoteType=2 and RefNo in (SELECT RefNo from Report)

如果你坚持使用 concat 命令(在功能上等同于 ||),下面的方法会起作用:

Select concat(concat(Line1,Line2),Line3), UserName, NotesDate From notes Where NoteType=2 and RefNo in (SELECT RefNo from Report)

DB2 中的 concat() 命令只能处理两个参数,这就是需要嵌套 concat() 的原因。

【讨论】:

如果输入了一行或多行注释,我应该指定只有 Line No 中的记录。 您可以在我的示例中添加“行不为空时的情况”。另一方面,为什么不将所有行保存在一个“行”列中? 而不是可能有问题的“||”运算符,“CONCAT”运算符可用于显式连接(至少在大多数 DB2 变体中)。 不幸的是,我不是 SYSadmin,无法更改表。我不知道为什么它是这样设计的,但是所有与实体相关的笔记都像这样存储在应用程序中。即输入屏幕上每一行的记录。

以上是关于连接字符串,基于 Case 语句的主要内容,如果未能解决你的问题,请参考以下文章

使用 case 语句将多行连接成一列

带有表连接、case 语句、计数、group by 子句的 Linq 查询

在 HiveQL 的“on”子句中使用 case 语句进行条件连接

POSTGRESQL:使用连接表的案例

如何根据case语句在连接多个表时选择一行

当我们在 select 中有 case 语句时,使用左外连接进行 Oracle 更新