来自列的SQL拆分数据与来自不同表的数据合并

时间:2016-01-22 16:25:09

标签: sql tsql

我有两张表TableATableBTable Bbar)中的一个字段需要拆分,因为它的几个内容用','分隔,并且每个字段都连接到{foo} field来自{ {1}}。两个表都有字段Table A

我已经成功地将它与两个表中的字段组合在一起,我需要使用下面的代码进行大量的试验和错误(ThingID不是我的专长!)。任何指针都将非常感激。

SQL

编辑:我所拥有的和我需要的例子。首先我得到了什么。

;WITH A AS ( SELECT ThingID, Name, Foo FROM dbo.TableA ), 
      B AS ( SELECT ThingID, Bar FROM dbo.TableB)
SELECT COALESCE (A.ThingID, B.ThingID) AS ThingID, A.Name, A.Foo, B.Bar
FROM A FULL OUTER JOIN B on A.ThingID = B.ThingID

我需要输出什么。

TableA                        TableB

ThingID | Name  | Foo         ThingID | Bar 
--------|-------|-----        --------|-----
  1230  | Aname | x12           1230  | x,x1,x2,x3
  1231  | Bname | x13           1231  | x,x1
  1232  | Cname | x14           1232  | x1,x2,x3
  1233  | Dname | x15           1233  | x2
  1234  | Ename | x16           1234  | x0,x1,x2

1 个答案:

答案 0 :(得分:0)

您可能无法找到问题的满意答案,因为您的架构坏了坏。您在记录的单个字段中有多个值,这是非常差的设计,现在您想要将这些值拆分出来然后单独加入它们。

您最好的办法是修复您的架构,以便您可以正确连接并将RDBMS用作RDBMS。

而不是像:

+---------+---------+
| thingid |   bar   |
+---------+---------+
|       1 | a,b,c   |
|       2 | d,e,f   |
|       3 | a,c,e,f |
+---------+---------+

使用:

+---------+-----+
| thingid | bar |
+---------+-----+
|       1 | a   |
|       1 | b   |
|       1 | c   |
|       2 | d   |
|       2 | e   |
|       2 | f   |
|       3 | a   |
|       3 | c   |
|       3 | e   |
|       3 | f   |
+---------+-----+

将一些精力投入到ETL工作中以使其成为一个正确的表模式将比你试图将这些单个记录拆分成多个记录的古怪变通方法付出更多的代价。

如果您不得不拆分它们(由于访问原因或顽固性),那么在sql server中研究“拆分到表”可能会有所帮助。有些人有书面功能和其他解决方法可以提供帮助。它们会变得缓慢而且笨拙,你可能会试图让它们发挥作用而分崩离析。