取消连接列 SQL

Posted

技术标签:

【中文标题】取消连接列 SQL【英文标题】:Un concat a column SQL 【发布时间】:2021-10-21 16:44:13 【问题描述】:

我有一个这样的连接列(order_type):

     OrderType
Data;Let;Data;Data;Let

我想从上面的列中创建两列

Data Let
 3    2

【问题讨论】:

当您决定对数据使用连接列时,就会出现问题 - 每次您想对这些数据做某事时,您都必须越过障碍。这就是为什么连接列被认为是糟糕的表设计,应该像瘟疫一样避免。 不,它没有。我知道如何将上述列与分号分隔。我需要在新列中添加 Data 和 Let 的数量。 您的数据库设计处于 0NF 级别,即未规范化。这是一个人为的问题,您可以通过规范化数据库轻松避免。 @bot9123 这是应该包含在问题中的信息。请edit您的问题明确说明,并添加我们需要帮助您的任何其他信息 - 例如,数据是否始终是确切的字符串“Data”和“Let”?如果不是,那么列名是否会超过表中允许的最大列名数? 【参考方案1】:

修复你的数据模型,虽然正确的方法可能无法立即完成,所以一个hacky的解决方法是只使用一些简单的字符串处理:

select 
 (length(ordertype) - length(Replace(ordertype,'Data',''))) / Length('Data') as Data,
 (length(ordertype) - length(Replace(ordertype,'Let',''))) / Length('Let') as Let
from t

【讨论】:

以上是关于取消连接列 SQL的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Oracle SQL 中取消透视列时出错

复合条件连接,内连接,左右连接,自然连接,等值连接

我试图从 dbvisualizer 连接 SQL 中的 3 列

在 SQL 中连接 int 和 nvarchar 列

Oracle sql - 连接所有列

获取连接列 SQL 的总和