Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将列作为行返回_Mysql_Sql_Pivot - Fatal编程技术网

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这样的
枢轴。