Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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_Pivot - Fatal编程技术网

Sql 如何在oracle中将列表转换为矩阵?

Sql 如何在oracle中将列表转换为矩阵?,sql,oracle,pivot,Sql,Oracle,Pivot,如何将包含3列x,y,value的列表转换为包含n行和n列的矩阵?n等于countx 大概是这样的: |x | y | z| -------------- |a1 | a2| 3| |a1 | a3| 5| |a2 | a3| 9| |a3 | a3| 0| |. | . | .| |. | . | .| |a5000| a3| 1| 以下是: |x |a1 |a2 |a3 . . |a5000 -------------------

如何将包含3列x,y,value的列表转换为包含n行和n列的矩阵?n等于countx

大概是这样的:

|x    | y | z|
--------------
|a1   | a2| 3|
|a1   | a3| 5|
|a2   | a3| 9|
|a3   | a3| 0|
|.    | . | .|
|.    | . | .|
|a5000| a3| 1|
以下是:

|x     |a1     |a2    |a3 . .   |a5000
---------------------------------------
|a1    |null   |3     |5   ..   |null
|a2    |null   |null  |9   ..   |null
|a3    |null   |null  |0   ..   |null
|.     | .     | .    |    ..   |.
|.     | .     | .    |    ..   |.
|a5000 |null   |null  |1   ..   |null
我无法使用pivot,因为我无法在查询中写入所有y值。
我想你想要的是:

SELECT * 
  FROM (SELECT * FROM YOUR_TABLE) 
  PIVOT (MAX(Z) 
         FOR Y IN ('A1','A2','A3'..., 'A5000')) 
  ORDER BY TO_NUMBER(SUBSTR(X,2));
正如您所提到的,您无法编写查询,因为“A”值太多

但您可以编写一个用于编写查询的查询:

SELECT 'SELECT * FROM (SELECT * FROM YOUR_TABLE) PIVOT (MAX(Z) FOR Y IN ('
    || LISTAGG('''A'||(LEVEL)||'''', ',') WITHIN GROUP (ORDER BY LEVEL) 
    || ')) ORDER BY TO_NUMBER(SUBSTR(X,2))'
  FROM DUAL 
  CONNECT BY LEVEL <= (SELECT COUNT(DISTINCT X) FROM YOUR_TABLE);

此查询将生成所需的查询。然后将结果查询作为任何其他动态选择启动。

Mmm。。。看起来是这样的:我不能使用这样的东西,因为我有太多的AttributeColumn。你是对的,但我发现oracle不能有超过1000列。