我正在从一个搞砸的数据库中重新编写一些表。一些表具有相同的具有不同表名的数据,并且每个表也具有相似的数据但具有不同的列名。无论如何,这是一个奇怪的请求,但这必须是这样的。
我需要将行向上移动以模拟一行,这样我就可以从两个不同的表创建一条记录。
我附上了一张照片。左边的表格将拉出一行,左边的表格将根据左表格中的id提供1到n行。我需要将行向上旋转以模拟一行,并使用两个结果创建一条记录。
从我的在线检查看,枢轴似乎是要走的路,但它似乎要我分组或做某种类型的聚合。
这样做的最佳方式是什么?
table1 ---Produces one row
table1id | col1 | col2 | col3
1 Wow Wee Zee
table2 ---Produces 1 - n rows
table2id | table1id | col1 | col2 | col3
1 1 sock cloth sup
2 1 bal baa zak
3 1 x y fooZ
需要看起来像这样(下面不是列名,它们是结果集)
Woo,wee,zee,sock,cloth,sup,bla,baaa,zak,x,y,fooZ
答案 0 :(得分:1)
如果使用MySQL:
SELECT a.table1id, GROUP_CONCAT(a.col) AS col_values
FROM
(
SELECT table1id, col1 col FROM table1 UNION ALL
SELECT table1id, col2 FROM table1 UNION ALL
SELECT table1id, col3 FROM table1 UNION ALL
SELECT table1id, col1 FROM table2 UNION ALL
SELECT table1id, col2 FROM table2 UNION ALL
SELECT table1id, col3 FROM table2
) a
GROUP BY a.table1id
如果使用SQL-Server:
SELECT a.table1id, b.colnames
FROM table1 a
CROSS APPLY
(
SELECT STUFF((
SELECT ',' + aa.col
FROM
(
SELECT table1id, col1 col FROM table1 UNION ALL
SELECT table1id, col2 FROM table1 UNION ALL
SELECT table1id, col3 FROM table1 UNION ALL
SELECT table1id, col1 FROM table2 UNION ALL
SELECT table1id, col2 FROM table2 UNION ALL
SELECT table1id, col3 FROM table2
) aa
WHERE aa.table1id = a.table1id
FOR XML PATH('')
), 1, 1, '') AS colnames
) b