sql - 如何合并行?

标签 sql

我有下表:

C1 | C2 | C3
---+----+---
X1 | Y1 | Z1
X1 | Y2 | Z2
X2 | Y3 | Z3
X2 | Y4 | Z4
X3 | Y5 | Z5
X3 | Y6 | Z6

我想合并行以获得:
C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9
---+----+----+---+-----+----+----+----+---
X1 | Y1 | Z1 | X2 | Y3 | Z3 | X3 | Y5 | Z5
X1 | Y2 | Z2 | X2 | Y4 | Z4 | X3 | Y6 | Z6

有没有一种聪明而通用的方法来做到这一点?
否则,我想我将为每个 Xi 分配临时序列号,然后加入它们以保留顺序。

我的数据模型非常适合 3 列布局,但我需要将它以 CSV 格式 3 x 3 输出到另一个程序。

最佳答案

试试这个,你将加入同一个表三次,并且必须通过别名来识别它们。

SELECT MT1.value1 AS C1,MT1.value2 AS C2,MT1.value3 AS C3,
  MT2.value1 AS C4,MT2.value2 AS C5,MT2.value3 AS C6,
  MT3.value1 AS C7,MT3.value2 AS C8,MT3.value3 AS C9 FROM MY_TABLE MT1
LEFT JOIN MY_TABLE MT2 ON (MT1.id = MT2.id AND MT2.C1='X2')
LEFT JOIN MY_TABLE MT3 ON (MT2.id = MT3.id AND MT3.C1='X3')
WHERE MT1.C1='X1'

思考:

首先,您需要通过左连接添加列。您将有 3^9 列。

然后,添加仅在 C1/C2/C3 不同的地方加入的条件(在 X1,X2,X3 中)

最后将结果减少到第一列='X1'。

关于sql - 如何合并行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24694767/

相关文章:

javascript - 如何将 html5 Canvas 图像保存到 mssql varbinary(max) 字段?

php - 如何管理空 IN sql 查询?

SQL - 删除所有重复项,但每个用户 ID 的每个组中最高的

c# - 使用 Epplus 在 C# 中对 Excel 进行 SQL 查询

sql - 将 'IN' 运算符与 SQL 命令对象和 C# 2.0 一起使用

SQL FOR XML - 将数据输出为元素或属性

mysql - 使用日期格式的 INSERT ... SELECT

sql - 如何在 Postgresql 中列值等于时从另一个表插入数据?

php - 带点的子串

c# - Entity Framework 。删除表中的所有行