Mysql 将列作为行返回
我有一张有一些名字参考的桌子 对于查询:Mysql 将列作为行返回,mysql,sql,pivot,Mysql,Sql,Pivot,我有一张有一些名字参考的桌子 对于查询: SELECT id, n1, n2, n3 FROM nametable 该表返回: +----+--------+-------+--------+ | id | n1 | n2 | n3 | +----+--------+-------+--------+ | 1 | Larry | Bob | Mo | | 2 | Sara | May | (NULL) | | 3 | Keiran | Lenn
SELECT id, n1, n2, n3
FROM nametable
该表返回:
+----+--------+-------+--------+
| id | n1 | n2 | n3 |
+----+--------+-------+--------+
| 1 | Larry | Bob | Mo |
| 2 | Sara | May | (NULL) |
| 3 | Keiran | Lenny | (NULL) |
+----+--------+-------+--------+
+----+--------+-------+--------+
|id | n1 | n2 | n3|
+----+--------+-------+--------+
|1 |拉里|鲍勃|莫|
|2 | Sara | May |(空)|
|3 | Keiran | Lenny |(空)|
+----+--------+-------+--------+
我想把它作为:
+----+--------+
| id | n |
+----+--------+
| 1 | Larry |
| 1 | Bob |
| 1 | Mo |
| 2 | Sara |
| 2 | May |
| 3 | Keiran |
| 3 | Lenny |
+----+--------+
+----+--------+
|id | n|
+----+--------+
|1 |拉里|
|1 |鲍勃|
|1个月|
|2 |萨拉|
|5月2日|
|3 |凯兰|
|3 |伦尼|
+----+--------+
请注意,(NULL)值不会在最终结果中返回
我做了一些研究,发现了一种叫做“透视表”的东西。然而,没有一个例子符合我的条件。我想在每一行保留id
如何使用查询实现这一点?我认为这是mysql中最接近的:
select * from (
(select id, n1 as n from nametable) union all
(select id, n2 as n from nametable) union all
(select id, n3 as n from nametable)
) x
您也可以通过这种方式取消桌面打印
SELECT id,
CASE n
WHEN 1 THEN n1
WHEN 2 THEN n2
WHEN 3 THEN n3
END n
FROM nametable t CROSS JOIN
(
SELECT 1 n UNION ALL
SELECT 2 UNION ALL
SELECT 3
) i
HAVING n IS NOT NULL
ORDER BY id, n;
输出:
| ID | N |
|----|--------|
| 1 | Bob |
| 1 | Larry |
| 1 | Mo |
| 2 | May |
| 2 | Sara |
| 3 | Keiran |
| 3 | Lenny |
|ID | N|
|----|--------|
|1 |鲍勃|
|1 |拉里|
|1个月|
|5月2日|
|2 |萨拉|
|3 |凯兰|
|3 |伦尼|
这里有一个演示我不相信MySQL有像SQL Server这样的
枢轴。