Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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/2/django/24.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 Oracle中表的“转置”_Sql_Oracle_Oracle11g_Pivot - Fatal编程技术网

Sql Oracle中表的“转置”

Sql Oracle中表的“转置”,sql,oracle,oracle11g,pivot,Sql,Oracle,Oracle11g,Pivot,我很难弄清楚如何重新安排一张桌子。我有一张大桌子,看起来像这样: +--------+-----------+ | NAME | ACCOUNT # | +--------+-----------+ | Nike | 87 | | Nike | 12 | | Adidas | 80 | | Adidas | 21 | +--------+-----------+ +------+--------+ | Nike | Adida

我很难弄清楚如何重新安排一张桌子。我有一张大桌子,看起来像这样:

+--------+-----------+
|  NAME  | ACCOUNT # |
+--------+-----------+
| Nike   |        87 |
| Nike   |        12 |
| Adidas |        80 |
| Adidas |        21 |
+--------+-----------+
+------+--------+
| Nike | Adidas |
+------+--------+
|   87 |     80 |
|   12 |     21 |
+------+--------+
我想把它重新排列成这样:

+--------+-----------+
|  NAME  | ACCOUNT # |
+--------+-----------+
| Nike   |        87 |
| Nike   |        12 |
| Adidas |        80 |
| Adidas |        21 |
+--------+-----------+
+------+--------+
| Nike | Adidas |
+------+--------+
|   87 |     80 |
|   12 |     21 |
+------+--------+

但我似乎不知道怎么做。我尝试使用PIVOT,但这只适用于聚合函数。我也尝试过使用FOR循环,但无法使其正常工作。

您可以通过几种方法来实现这一点,但都是通过枚举行来实现的。以下是使用条件聚合的示例:

select max(case when name = 'Nike' then account end) as Nike,
       max(case when name = 'Adidas' then account end) as Adidas
from (select t.*,
             row_number() over (partition by name order by account desc) as seqnum
      from t
     ) t
group by seqnum;

再次考虑pivot解决方案,但首先为滚动名称组计数添加行号。下面假定一个自动编号ID字段:


但是,对于大约200个项目,如果没有各种解决方法(包括Pivot XML输出或使用PL/SQL的存储过程),则无法轻松呈现Pivot的IN子句。类似地,您可以使用通用编码Java、PHP、Python、R从vector/array中的Table1 resultset中检索SELECT DISTINCT Name,使用引号和逗号分隔符连接元素值折叠或内爆数组,并在in子句中删除整个列表。

告诉我们您尝试了什么,以及为什么它不能满足您的需要。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见向我们展示一些SQL。如果您不需要聚合使用最小或最大函数谢谢您的答案,但不幸的是,这对我不起作用-我应该提到,但大约有200个名称,因此我无法为每个名称编写条件语句。@TinaBelcher。你可以。您可能会发现电子表格有助于生成代码。