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行。枢轴能产生笛卡尔积吗?