【发布时间】:2016-09-22 19:20:13
【问题描述】:
假设我有以下设置
MailsTable
Mail1 Varchar(40)
Mail2 Varchar(40)
Mail3 Varchar(40)
Mail4 Varchar(40)
现在我正在构建一个查询,该查询应包括至少有 1 个非空邮件(Mail1 或 Mail2...等)的行。并用';'连接所有非空邮件 然后填充缺失的空白字符,总共达到 163 个字符(所有 4 封邮件 + ;)
例子:
1)在Mail1和Mail3存在的一行中:
george@net.com;louis@net.com
(以及 163-28=135 个空白字符来填充总共 163 个字符)
2)Mail2、Mail3、Mail4存在的一行:
mail2@gmail.com;mail3@gmail.com;mail4@gmail.com(以及许多空白字符来填充 163)
但是当我尝试构建 Select 时它变得有点棘手,我考虑使用 CASE WHEN THEN 子句,但最终有太多的情况需要处理。以及“填充空白字符”问题。
欢迎任何帮助。 提前致谢。
【问题讨论】:
-
你试过什么?您应该包括一些示例数据和预期结果。另外,当您说填充空白字符时,您只是想要 CHAR(163) 还是想要空格?
-
我一直在使用 Convert(CHAR(163), column) 处理填充物,但这些实际上是具有许多不同场景的 4 列,所以我不确定如何包装整个内容。至于数据,我会尝试添加更多示例。
-
糟糕的桌子设计。只有一个邮件栏。 (如果需要,可以使用多行。)
-
正如@jarlh 所说,您需要对此进行规范化。一旦你对数据结构进行了适当的规范化,查询就会变得非常简单。
-
这完全是一片混乱。这甚至不是完整的表格,但这就是我最近找到这个数据库的方式。我会提出警告,希望我们以后可以改变它。
标签: sql sql-server database sql-server-2008 select-case