在SQL中从“/”获取相同列中的多个值

时间:2015-01-16 19:01:13

标签: sql excel select tableau

我在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”。 我怎样才能做到这一点?

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果您只想选择"员工1"你可以使用WHERE。 例如:

表A:

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

代码:

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

答案 1 :(得分:0)

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

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

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

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

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