连接字符串,基于 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 语句、计数、group by 子句的 Linq 查询