Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
如何从PostgreSQL的单行数据库表中获取多行?_Sql_Postgresql_Union_Unpivot - Fatal编程技术网

如何从PostgreSQL的单行数据库表中获取多行?

如何从PostgreSQL的单行数据库表中获取多行?,sql,postgresql,union,unpivot,Sql,Postgresql,Union,Unpivot,我有一个PostgreSQL数据库表名 | Name | Intime1 | Intime2 | Intime3 | Intime4 | Intime5 | Intime6 | |-------|----------|------------------|-----------|------------------|----------|------------------| | Zakir | | 02/0

我有一个PostgreSQL数据库表名

| Name  |  Intime1 |      Intime2     |   Intime3 |      Intime4     |  Intime5 |      Intime6     |
|-------|----------|------------------|-----------|------------------|----------|------------------|
| Zakir |          |    02/01/18:9.00 |           |    04/01/18:9.07 |          |    06/01/18:9.05 |
我想从这张桌子上:

| Name  |     Intime    |
|-------|---------------|
| Zakir | 02/01/18:9.00 |
| Zakir | 04/01/18:9.07 |
| Zakir | 06/01/18:9.05 |
现在,postgresql中的查询是什么?

使用联合:

select name, intime1 as intime
from intime
union all
select name, intime2
from intime
union all
select name, intime3
from intime
union all
select name, intime4
from intime
union all
select name, intime5
from intime
union all
select name, intime6
from intime
另一个特定于Postgres的解决方案是对列数组使用
unest

select i.name, t.intime
from intime as i
  cross join unnest(array[intime1,intime2,intime3,intime4,intime5,intime6]) as t(intime);
如果您还想知道每一行属于哪一列,您可以使用带有序号的

select i.name, t.intime, t.nr
from intime as i
  cross join unnest(array[intime1,intime2,intime3,intime4,intime5,intime6]) with ordinality as t(intime,nr);
在线示例:

使用工会:

select name, intime1 as intime
from intime
union all
select name, intime2
from intime
union all
select name, intime3
from intime
union all
select name, intime4
from intime
union all
select name, intime5
from intime
union all
select name, intime6
from intime
另一个特定于Postgres的解决方案是对列数组使用
unest

select i.name, t.intime
from intime as i
  cross join unnest(array[intime1,intime2,intime3,intime4,intime5,intime6]) as t(intime);
如果您还想知道每一行属于哪一列,您可以使用带有序号的

select i.name, t.intime, t.nr
from intime as i
  cross join unnest(array[intime1,intime2,intime3,intime4,intime5,intime6]) with ordinality as t(intime,nr);
联机示例:

使用横向连接:

select t.name, v.intime
from t cross join lateral
      (values (intime1), (intime2), (intime3), (intime4), (intime5), (intime6)
      ) v(intime);
横向联接是ANSI/ISO标准语法,功能非常强大。取消激活数据只是使用它们可以完成的一件事。

使用横向连接:

select t.name, v.intime
from t cross join lateral
      (values (intime1), (intime2), (intime3), (intime4), (intime5), (intime6)
      ) v(intime);

横向联接是ANSI/ISO标准语法,功能非常强大。取消激活数据只是使用它们可以完成的一件事。

亲爱的“没有名字的马”您的第二个查询不起作用。请再检查一遍。谢谢你的第一个问题。@ZakirHossain:对不起,有一个输入错误
而不是
[
亲爱的“没有名字的马”你的第二个问题不起作用。请你再检查一遍。谢谢你的第一个问题。@ZakirHossain:对不起,有一个输入错误
而不是
[