【问题标题】:Getting multiple values from same column seperated by "/" in SQL从 SQL 中以“/”分隔的同一列获取多个值
【发布时间】:2015-01-20 05:01:48
【问题描述】:

我在 Excel 工作表中有一个表格,我在 Tableau 中使用自定义 SQL 选项。该表的结构如下:


     Project        Identified          Led     Fee

     1          Employee1           Employee2   100000
     2          Employee2           Employee3   200000
     3      Employee1 / Employee2   Employee1   300000

我正在使用下面的代码来获取下一个结构:

select [Identified] as Name, [Project], 'Identified' as Contribution, [Fee]
union
select [Led], [Project], 'Led', [Fee]

     Name       Project     Contribution        Fee

     Employee1      1       Identified      100000
     Employee1      3       Identified      300000
     Employee1      3       Led             300000
     Employee2      1       Led             100000
     Employee2      2       Identified      200000
     Employee2      3       Identified      300000
     Employee3      2       Led             200000

但我当然不能像上面那样分开“Employee1 / Employee2”。 我怎样才能做到这一点?

提前致谢。

【问题讨论】:

    标签: sql excel select tableau-api


    【解决方案1】:

    如果您只想选择“Employee1”,您可以使用 WHERE。 例如:

    表A:

    (Column: Name) - (Column: Colour)
    Employee1 - Purple 
    Employee1 - Blue 
    Employee2 - White 
    

    代码:

    SELECT Name, Colour 
    FROM TableA 
    WHERE Name = 'Employee1'
    

    【讨论】:

    • 我有 300 多名员工,可以是这些员工的任意组合,我希望能够提取他们两个并在新表中生成 2 个不同的行。
    • 也许你可以使用: WHERE Name LIKE '%Employee1%' 然后你也可以获取那些列。然后你可以创建一个循环来查看'Name'是否有'slach'。如果是,则取一部分旧值。并将新值作为旧值的替换。
    • 也许这也不错:link 您可以将 SELECT.... 放在 Cursus 中,然后遍历每个值。
    【解决方案2】:

    您在项目和员工之间有一个名为“已识别”的多对多关系。通过使用某种分隔符将多个值塞入单个字段来表示一对多关系会导致各种困难,这就是为什么关系数据库设计强烈反对这种方法并鼓励将重复信息分解到新表(或工作表中) Excel 案例)。

    因此,一种更灵活的方法是为员工创建一个工作表,每行一个员工,并有一个员工 ID 列来唯一标识每个员工。它可以是合成的仅供内部使用的 id。有一个类似的项目工作表。最后是第三个链接或连接表工作表来表示已识别的关联——有两列一个员工 ID 和一个项目 ID。该表中的每一行都表示特定员工帮助确定了特定项目。

    如果一个项目可以有多个领导者,您可以对该关联使用相同的方法。如果没有,您可以只在 Project 表中有一个 leader_id 列。如果您排除关联,您可以添加与关联相关的信息,例如日期、角色等,但这会增加一些复杂性。

    这是标准的数据库设计。 40 年了,很好理解。有关数据库规范化的更多信息,请参阅任何有关数据库设计或数据建模的书籍。您的设计违反了第一范式,通常最好争取至少第三范式 - 然后在特殊情况下退出以进行性能优化或只读仓库设计。

    您可以坚持当前的设计,并尝试在每个读取数据的应用程序中加入一些东西,以尝试处理分隔符以处理多值字段。但是您将与您的数据作斗争,而不是以一种自然地代表关系的方式来组织它。

    【讨论】:

      猜你喜欢
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      相关资源
      最近更新 更多