Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 11g透视不同行_Sql_Oracle_Oracle11g_Distinct_Pivot - Fatal编程技术网

Sql Oracle 11g透视不同行

Sql Oracle 11g透视不同行,sql,oracle,oracle11g,distinct,pivot,Sql,Oracle,Oracle11g,Distinct,Pivot,我有这样的数据: **ATTR_ID** **ATTR_VAL** 103 E 104 F 136 E 136 U 我想使用PIVOT将数据转换为: **103** **104** **136** E F U E F E 在枢轴中使用MAX()会生成一条记录。我需要两张唱片。属性

我有这样的数据:

**ATTR_ID**    **ATTR_VAL**
103            E
104            F             
136            E
136            U
我想使用PIVOT将数据转换为:

**103**     **104**     **136**
E           F           U
E           F           E
在枢轴中使用MAX()会生成一条记录。我需要两张唱片。属性id可以有多个属性值

SELECT *
( SELECT ATTR_ID, ATTR_VAL FROM DATA_TABLE )
PIVOT (MAX(ATTR_VAL) FOR ATTR_ID IN (103,104,136))

如果你只想要笛卡尔积,我用PIVOT做这件事是不是做错了

SELECT attr_103.attr_val as "103",
       attr_104.attr_val as "104",
       attr_136.attr_val as "136"
  FROM (SELECT attr_id, attr_val
          FROM attr_table
         WHERE attr_id = 103) attr_103
       CROSS JOIN 
       (SELECT attr_id, attr_val
          FROM attr_table
         WHERE attr_id = 104) attr_104
       CROSS JOIN 
       (SELECT attr_id, attr_val
          FROM attr_table
         WHERE attr_id = 136) attr_136

为什么103有第二个E,104有第二个F?该数据不会出现在您的示例中。你只是把它抄下来吗?如果104和136在表中都有两行,您如何知道哪些行在数据透视输出中放在一起?还是没关系?如果104有3行,您如何知道是从136向下复制U还是E?谢谢您的回复。你是对的数据没有出现在样本中,但我必须创建它。另一位开发人员向我解释说,我需要创建“笛卡尔产品”。所有数据都存储在嵌套行中。我必须将行改回列,以便可以连接到另一个表。那么,如果你想要一个笛卡尔积,那就意味着如果103有2行,104有3行,136有5行,你最终会得到2*3*5=30行。是吗?是的,你是对的。在这种情况下,我会得到30行。枢轴能产生笛卡尔积吗?