Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Sql 旋转日期和值列以获得它们的组合_Sql_Oracle - Fatal编程技术网

Sql 旋转日期和值列以获得它们的组合

Sql 旋转日期和值列以获得它们的组合,sql,oracle,Sql,Oracle,我有一张这样结构的桌子: +--------+-----------+------------+------+ | userid | date | item | rank | +--------+-----------+------------+------+ | 34444 | 01-Jul-15 | pen | 3 | | 34444 | 04-Jul-15 | TV | 2 | | 34444 | 09-Jul-15 |

我有一张这样结构的桌子:

+--------+-----------+------------+------+
| userid |   date    |    item    | rank |
+--------+-----------+------------+------+
|  34444 | 01-Jul-15 | pen        |    3 |
|  34444 | 04-Jul-15 | TV         |    2 |
|  34444 | 09-Jul-15 | controller |    1 |
|    531 | 03-Jul-15 | keyboard   |    3 |
|    531 | 06-Jul-15 | pen        |    2 |
|    531 | 10-Jul-15 | bowl       |    1 |
+--------+-----------+------------+------+
每个项目已经根据日期进行了排名,每个用户最多只能有3个项目。我有他们的最后3个项目和与之相关的日期。这些项目可以是任何东西

我希望以透视日期和项目组合的方式生成视图。例如,此表所需的视图为:

+--------+------------+-----------+-------+-----------+----------+-----------+
| userid |   item1    |   date1   | item2 |   date2   |  item3   |   date3   |
+--------+------------+-----------+-------+-----------+----------+-----------+
|  34444 | controller | 09-Jul-15 | TV    | 04-Jul-15 | pen      | 01-Jul-15 |
|    531 | bowl       | 10-Jul-15 | pen   | 06-Jul-15 | keyboard | 03-Jul-15 |
+--------+------------+-----------+-------+-----------+----------+-----------+
这可能吗


谢谢

你只需要做一个旋转。在较新的版本中,可以使用实际的
pivot
关键字。或者在任何版本中,您都可以这样做

SELECT userid,
       max( case when rank = 1 then item else null end) item1,
       max( case when rank = 1 then date else null end) date1,
       max( case when rank = 2 then item else null end) item2,
       max( case when rank = 2 then date else null end) date2,
       max( case when rank = 3 then item else null end) item3,
       max( case when rank = 3 then date else null end) date3
  FROM your_table
 GROUP BY userid